重复mysql结果循环两次

时间:2016-02-09 09:48:42

标签: php mysql

我需要循环两次mysql结果。 所以我决定将其结果复制到一个新变量中:

$result = mysql_query($query, $db);
$result_copy = $result;

然后我循环我的$result并打印数据 但是,当我尝试循环$result_copy时,while将无效 我可以使用mysql_data_seek($result_copy, 0)来解决问题,但我想理解为什么副本不会从[0]开始 提前谢谢!
-----------------------
我发布了更长版本的代码:

$query = [...];
$result = mysql_query($query, $db);
$result_copy = $result;
while ($row = mysql_fetch_array($result)) {
   [...] // this outputs the data
}
while ($row = mysql_fetch_array($result_copy)) {
    [...] // No data are shown here. Pointer is at the end of $result_copy
}

5 个答案:

答案 0 :(得分:2)

数据行由 mysql_fetch_array($ result)语句检索。 如果您复制 $ result ,您只需复制句柄(资源ID),而不是数据。

所以,你要么重复 while 循环,要么重复循环时所采取的行动:

<?php

$query = [...];
$result = mysql_query($query, $db);
// $result_copy = $result;

while ($row = mysql_fetch_array($result)) {
   // We got a row here ...
   foreach($row as key => $value) 
       [...] // Do this ...
       [...] // Do that again ...
    }
}

?>

答案 1 :(得分:1)

因为您的$result存储了Resource id

不是all记录的原因

答案 2 :(得分:1)

我建议你必须使用clone来创建$ result_copy。 原因(来自PHP5手册):

  

从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,它指向同一个对象。

所以这就是指针在最后位置的原因。

答案 3 :(得分:0)

我认为这是因为mysql_query()返回一个名为resource的内部数据结构,它保存了自己指向当前处理行的指针。当你执行$result_copy = $result;时,你没有复制,你只需将其指针指向另一个变量。

使用mysql_data_seek($result, 0)是正确的。

答案 4 :(得分:0)

原因是基于docs of mysql_fetch_array

  

返回与获取的行对应的数组并移动   提前内部数据指针