在同一 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'] . ' ' . $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'] . ' ' . $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'] . ' ' . $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
}
我有一个工作结果集,在 运行 时间内循环显示作者和链接列表。工作正常。我需要能够在同一页面中两次显示同一数据集。我不想 运行 两次相同的查询。如何将结果集(如下所示的显示输出)设置为 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'] . ' ' . $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'] . ' ' . $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'] . ' ' . $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
}