Php 无法更新超过10000条记录的mysql表

Php 无法更新超过10000条记录的mysql表,php,mysql,Php,Mysql,我的密码在这里 $query = "SELECT * FROM `table`"; $result = mysql_query($query); $arr = array(); while($info = mysql_fetch_array($result)) { if (!in_array($info['row'], $arr)) { $arr[] = $info['row']; } } foreach ($arr as $v) { $pass = "pass"; $quer

我的密码在这里

$query = "SELECT * FROM `table`";
$result = mysql_query($query);
 $arr = array();
 while($info = mysql_fetch_array($result)) {

 if (!in_array($info['row'], $arr)) {
 $arr[] = $info['row'];
 }
 }

foreach ($arr as $v) {
 $pass = "pass";
$query2 = "UPDATE `table` SET pass = '$pass'  WHERE row = '$v'";
$result2 = mysql_query($query2);
}
它处理了2分钟,但数据库中什么也没有发生。我哪里会错呢

谢谢


编辑:好的,我发现了我的错误。这是关于我为生成随机通行证而编写的代码,我的问题中没有包括这些代码。谢谢大家,有一种可能是内存不足:通过将所有行存储在一个数组中,在进入更新部分之前,您将需要大量内存—在这种情况下,这充分解释了为什么您看不到任何更改;剧本永远不会讲到那一部分

另一种可能性是,您的脚本和已停止。根据您的服务器配置,在这种情况下可能是一个选项

但是,您在此处向我们展示的脚本的效果与此单一查询完全相同:

UPDATE `table` SET pass = 'pass'
由于您对select中的行没有任何条件,并且您所做的唯一筛选是不在row列中存储具有相同值的多行-但是当您到达更新过程时,您将通过row列标识每一行,这意味着它将更新row列中具有相同值的所有行。如果每一行的行值都是唯一的,那么就不需要检查您是否已经看到了该行;如果它不是唯一的,那么在更新时需要不同的条件


如果您直接运行更新,PHP将不需要使用大量内存,MySQL也不需要在更新过程中搜索每一行;它可以一次遍历它们。除非您在这里遗漏了一些内容,否则您最好只执行一个简单的查询。

在处理大型数据集时,我看到“mysql消失了”。在这种情况下不确定,但在尝试使用较小的选项(如“从tableName中选择column1”)时会发生什么情况?此外,如果您可以设置一些日志来缩小问题的范围。也许运行第一个查询并确保它运行良好,然后尝试第二个查询,而不是一次完成它们?您的代码没有明显的错误。尝试打印出第一个查询并停止脚本。然后将该SQL代码粘贴到数据库接口中。它工作吗?当我打印数组时(在第一次while循环之后),它打印得很好,没有任何问题,但问题在于更新。我将尝试只上传第一行现在第一个循环运行良好,我可以打印8000条记录的数组。值不是唯一的,“pass”是随机生成的数字(我没有在这里写代码),我想通过给每个pass变量来更新具有相同数据的行。我将检查时间限制,设置时间限制(0);