我正在从mysql数据库中检索一些数据。有两个循环使用相同的结果集。
while ($row = mysqli_fetch_array($newsQuery)) {
echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>";
}
此循环以成功结束。然后在同一页面中,我有以下循环。
while ($row = mysqli_fetch_array($newsQuery)) {
echo $row["news_content"];
}
即使表中有内容,此循环也不会返回任何内容。当我在第一个循环中尝试它。内容显示正确。我知道自己做错了什么。
答案 0 :(得分:5)
来自PHP的 mysqli_fetch_array DOCS:
返回与获取的行对应的数组,如果结果参数表示的结果集不再有行,则返回NULL。
您在$row = mysqli_fetch_array($newsQuery)
这意味着循环将继续mysqli_fetch_array($newsQuery)
返回NULL
。
这就是为什么你 cant 再次使用该循环的原因,因为mysqli已经完成了取结果而mysqli_fetch_array($newsQuery)
现在返回 NULL ,直到你做了一个新查询。
首先尝试使用结果填充变量,然后循环该变量:
$results = array();
while ($row = mysqli_fetch_array($newsQuery)) {
$results[] = $row;
}
foreach ($results as $key => $row) {
echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>";
}
foreach ($results as $key => $row) {
echo $row["news_content"];
}
答案 1 :(得分:3)
虽然最好避免导致两次循环结果集的逻辑,但如果需要,您需要将结果集重置为开头: -
mysqli_data_seek($newsQuery, 0);
答案 2 :(得分:2)
因为您已获取$newsQuery
的值,请尝试使用此代码
//temporary save the news content into array
$content = array();
$x=0;
while ($row = mysqli_fetch_array($newsQuery)) {
echo "<a href='news-article.php?articleId=" .$row["news_id"]."' class='list-group-item active'>".$row["news_title"]."</a>";
$content[$x]= $row["news_content"];
$x++;
}
如果你想要检索它
//now retrieve it
for($y=0; $y<count($content); $y++)
{
echo $content[$y]+"<br/>";
}