Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复制mysql结果以循环两次_Php_Mysql - Fatal编程技术网

Php 复制mysql结果以循环两次

Php 复制mysql结果以循环两次,php,mysql,Php,Mysql,我需要循环mysql结果两次。 因此,我决定将其结果复制到一个新变量中: $result = mysql_query($query, $db); $result_copy = $result; 然后我循环我的$result并打印数据。 但是当我尝试循环$result\u copy时,while将不起作用。 我可以通过使用mysql\u data\u seek($result\u copy,0)解决这个问题,但我想了解为什么拷贝不会从[0]开始。 提前谢谢 -------------------

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

$result = mysql_query($query, $db);
$result_copy = $result;
然后我循环我的
$result
并打印数据。
但是当我尝试循环
$result\u copy
时,
while
将不起作用。
我可以通过使用
mysql\u data\u seek($result\u 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
}

因为您的
$result
存储了
资源id


all
记录这就是为什么因为
$result
存储了
资源id


不是
all
记录,这就是为什么数据行由mysql\u fetch\u array($result)语句检索的原因。 如果复制$result,则只是复制句柄(资源id),而不是数据

因此,您可以重复while循环,也可以重复while循环中的操作:


数据行由mysql\u fetch\u array($result)语句检索。 如果复制$result,则只是复制句柄(资源id),而不是数据

因此,您可以重复while循环,也可以重复while循环中的操作:


我认为这是因为
mysql\u query()
返回一个名为
resource
的内部数据结构,它拥有自己的指向当前处理行的指针。当您执行
$result\u copy=$result你不是在复制,你只是把它的指针赋给另一个变量


使用
mysql\u data\u seek($result,0)
是正确的。

我认为这是因为
mysql\u query()
返回一个名为
resource
的内部数据结构,它拥有指向当前处理行的指针。当您执行
$result\u copy=$result你不是在复制,你只是把它的指针赋给另一个变量


使用
mysql\u data\u seek($result,0)
是正确的。

原因基于

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


原因是基于

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


我建议您必须使用
克隆
来创建$result\u副本。 原因(来自PHP5手册):

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


这就是指针位于最后位置的原因。

我建议您必须使用
克隆来创建$result\u copy。
原因(来自PHP5手册):

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


这就是指针位于最后一个位置的原因。

请不要使用
mysql.*
函数,它们在PHP7中被删除。改用
mysqli
PDO
。请给我们看看你的代码,我所有的新项目都使用PDO。我在做一份旧工作,不是我的,把一百万行代码转换成PDO是不可行的。现在用代码更新。请不要使用
mysql.*
函数,它们在PHP7中被删除。改用
mysqli
PDO
。请给我们看看你的代码,我所有的新项目都使用PDO。我在做一份旧工作,不是我的,把一百万行代码转换成PDO是不可行的。现在用代码更新。谢谢你,这就是我错过的!谢谢你,这就是我错过的!
<?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 ...
    }
}

?>