【问题标题】:PHP: why can't I loop twice on mysqli_fetch_array() results? [duplicate]PHP:为什么我不能在 mysqli_fetch_array() 结果上循环两次? [复制]
【发布时间】:2014-10-21 08:53:38
【问题描述】:

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

即使表格中有内容,此循环也不返回任何内容。当我在第一个循环中尝试时。内容显示正确。关于我做错了什么的任何想法。

【问题讨论】:

  • 想想为什么第一个循环首先停止

标签: php mysql mysqli


【解决方案1】:

来自 PHP 的 mysqli_fetch_array DOCS:

如果结果参数表示的结果集没有更多行,则返回与获取的行对应的数组。

您正在$row = mysqli_fetch_array($newsQuery) 上使用“while”循环

这意味着循环将继续进行,直到mysqli_fetch_array($newsQuery) 返回NULL

这就是您不能再次使用该循环的原因,因为 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"];
}

【讨论】:

    【解决方案2】:

    虽然最好避免导致结果集循环两次的逻辑,但如有必要,您需要将结果集重置回开始:-

    mysqli_data_seek($newsQuery, 0);
    

    【讨论】:

      【解决方案3】:

      因为你已经获取了$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/>";
      
      }
      

      【讨论】:

      • 感谢您的回答。我对 php 有点陌生。
      • 这段代码解决了你的问题吗?
      • $x 不会在任何地方递增,因此 $content 将只保留最后一个值
      • 哦,我忘了增加,我更新了我的答案
      • 是的,我知道我在做什么!
      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多