在同一 PHP 页面上重复使用 mysql 查询结果集

Reuse a mysql query resultset on same PHP page

我有一个工作结果集,在 运行 时间内循环显示作者和链接列表。工作正常。我需要能够在同一页面中两次显示同一数据集。我不想 运行 两次相同的查询。如何将结果集(如下所示的显示输出)设置为 var,并在两个表示点上获得相同的输出?不久前我看到了一些关于使用 for each 循环的内容,但不确定该怎么做。

查询:

if($stmtr = mysqli_prepare($link, $sql8)){
  // Bind variables to the prepared statement as parameters
  mysqli_stmt_bind_param($stmtr, "s", $param_stripurlslash);

// Set parameters
  $param_stripurlslash = $stripurlslash;

// Attempt to execute the prepared statement
if(mysqli_stmt_execute($stmtr)){
    $resultAuthor = mysqli_stmt_get_result($stmtr);
    $usera = mysqli_fetch_assoc($resultAuthor, MYSQLI_ASSOC);              
} else {
    echo "Oops! Something went wrong. Please try again later.";
} 

}

显示输出:

<?php                         
    while ($row = mysqli_fetch_assoc($resultAuthor)) {

      if ($row['book_author_first_name_only'] == 0 ) {
        echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . '&nbsp;' . $row['book_author_last_name'] . "</a>";
      } else {
        echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . "</a>";
      }
    }
?>

老实说,你已经完成了 99% 的工作。

你可以替换这个:

while ($row = mysqli_fetch_assoc($resultAuthor)) {
  if ($row['book_author_first_name_only'] == 0 ) {
    echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . '&nbsp;' . $row['book_author_last_name'] . "</a>";
  } else {
    echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . "</a>";
  }
}

有:

$rows = mysqli_fetch_all($resultAuthor, MYSQLI_ASSOC);

一次获取所有行并将它们存储在数组中 ($rows)。

您会注意到这看起来与您在 while (...) { } 循环中使用的一次一条记录的版本非常相似。

现在您可以根据需要简单地迭代此数据:

foreach ($rows as $row) {
    if ($row['book_author_first_name_only'] == 0 ) {
        echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . '&nbsp;' . $row['book_author_last_name'] . "</a>";
    } else {
        echo "<a class='fw-bold author-link' href='#" . $row['book_id'] . "'>" . $row['book_author_first_name'] . "</a>";
    }
}

// and again
foreach ($rows as $row) {
    // ... do something else with each $row
}

// and again
foreach ($rows as $row) {
    // ... do something else with each $row
}