PHP:为什么我不能在mysqli_fetch_array()结果上循环两次?

时间:2014-10-21 08:53:38

标签: php mysql mysqli

我正在从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"];
}

即使表中有内容,此循环也不会返回任何内容。当我在第一个循环中尝试它。内容显示正确。我知道自己做错了什么。

3 个答案:

答案 0 :(得分:5)

来自PHP的 mysqli_fetch_array DOCS

  

返回与获取的行对应的数组,如果结果参数表示的结果集不再有行,则返回NULL。

您在$row = mysqli_fetch_array($newsQuery)

上使用'while'循环

这意味着循环将继续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/>";

}