Php 复制mysql结果以循环两次
我需要循环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]开始。 提前谢谢 -------------------
$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 ...
}
}
?>