为什么单个sql查询不能在多while()循环中工作


why single sql query is not working on multiple while () loop?

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

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

$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/>";
}

如果需要多次使用相同的结果,请先将其存储在本地数组中。一旦你的第一个循环完成,显然"没有更多的数据了",否则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_函数家族已被弃用,并将在未来的PHP版本中开始破坏。考虑切换到PDO或mysqli。

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

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

你可以使用

  • mysql_data_seek(resource$result,int$row_number)
  • mysql_data_seek($query,0)

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

    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