将mysql_fetch_array与两个循环中的相同结果集放在一起不起作用

时间:2013-09-24 08:18:39

标签: php

第一个循环很好,但第二个循环不是。例如:

$sql = "select * from table";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
  //some code
}
while($row=mysql_fetch_array($result))
{
  //some code
}

我只想知道原因

3 个答案:

答案 0 :(得分:1)

在我回答之后我做了更多研究并在下面的编辑中发布了正确的版本

因为它是数组迭代器在PHP中工作的方式,重置指针应该可以解决问题:

while($row=mysql_fetch_array($result))
{
  //some code
}
// reset($result); - won't work with mysql_query() result
mysql_data_seek($result, 0);
while($row=mysql_fetch_array($result))
{
   //some code
}

详细了解reset() function here

编辑:经过更多研究后发现我错了 - 使用mysql_data_seek

mysql_data_seek($result, 0);

答案 1 :(得分:1)

通过first while循环获取结果集的所有数据后,指针将转到最后一条记录,因此它不会在第二个while循环中获取任何内容。您需要将指针设置回第一个记录,然后再将其传递给while循环。

只需更新您的代码:

$sql = "select * from table";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result))
{
  //some code
}

mysql_data_seek(0); // Add this line

while($row=mysql_fetch_array($result))
{
  //some code
}

答案 2 :(得分:0)

您可以像这样复制$result

$sql = "select * from table";
$result=mysql_query($sql);
$result2 = $result;
while($row=mysql_fetch_array($result))
{
  //some code
}
while($row=mysql_fetch_array($result2))
{
  //some code
}