【问题标题】:why single sql query is not working on multiple while () loop?为什么单个 sql 查询不适用于多个 while () 循环?
【发布时间】:2023-03-14 09:01:01
【问题描述】:

我不知道为什么它在 PHP 中表现得那样。在我的第一个 while() 循环中显示数据,但第二个和第三个 while() 循环不返回/显示任何数据。我只使用一个 sql 查询来获取相同的数据 3 次。

你知道为什么在 php 的第二个和第三个 while 循环中没有显示数据吗?

$query =  mysql_query("SELECT * FROM contact_details ORDER BY family_name LIMIT 10");

while($a=mysql_fetch_array($query)){
    echo $fname = $a['family_name'];
    echo "<br/>";
}

while($b=mysql_fetch_array($query)){
    echo $fname = $b['family_name'];
    echo "<br/>";
}

while($c=mysql_fetch_array($query)){
    echo $fname = $c['family_name'];
    echo "<br/>";
}

【问题讨论】:

  • 想想为什么第一个循环会首先停止!
  • @deceze 我不是像你这样的专业程序员!
  • 所以?这会妨碍你思考吗?

标签: php


【解决方案1】:

如果您需要多次使用相同的结果,请先将其存储在本地数组中。一旦你的第一个循环完成,显然“没有更多数据了”,否则while 不会停止。

例如:

$query =  mysql_query("SELECT * FROM contact_details ORDER BY family_name LIMIT 10");
$data = [];
while($row = mysql_fetch_array($query))
    $data[] = $row;

foreach($data as $row)
  // Do Stuff;
foreach($data as $row)
  // Do Stuff;
foreach($data as $row)
  // Do Stuff;

强制性免责声明:mysql_ family of functions is deprecated 并将在未来的 PHP 版本中开始中断。考虑切换到 PDO 或 mysqli。

【讨论】:

  • 当我尝试在 foreach 循环中回显 $row 时,它向我显示错误消息。
  • 感谢您的回答。
【解决方案2】:

从 PHP 文档中,mysql_fetch_array 返回“返回与获取的行相对应的字符串数组,如果没有更多行,则返回 FALSE”,因此第二个和第三个循环返回 FLASE(没有更多数据)

【讨论】:

    【解决方案3】:

    由于数组指针已到达末尾,因此无法再次读取它。

    你可以使用

    • mysql_data_seek ( 资源 $result , int $row_number );
    • mysql_data_seek ( $query , 0 );

    【讨论】:

      【解决方案4】:

      我建议在每个 while 循环之后尝试使用 this 重置指向该查询的指针

          mysql_data_seek($query, 0); // add this after every while loop.
                                           //you need this to reset the pointer of the query.
      

      试试这个,如果您仍然有问题,请回来查看。 这个链接有你同样的问题,已经回答PHP - Multiple while($row = mysql_fetch_array($variable)) { } ERRORS

      【讨论】:

        猜你喜欢
        • 2014-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        相关资源
        最近更新 更多