我的代码在这里
$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分钟,db中没有任何反应。哪里可能是错的?
由于
编辑:好的,我发现了我的错误。这是关于我为生成随机传递而编写的代码,我没有在我的问题中包含这些代码。谢谢大家你答案 0 :(得分:1)
一种可能性是内存不足:通过将所有行存储在一个数组中,在进入更新部分之前需要大量内存 - 在这种情况下,这完全解释了为什么你看不到变化;脚本永远不会到达那个部分。
另一种可能性是您的脚本runs for too long已停止。根据您的服务器配置,set_time_limit可能是一种选择。
但是,您在此处向我们展示的脚本的效果与此单个查询完全相同:
UPDATE `table` SET pass = 'pass'
因为你对select中的行没有条件,你所做的唯一过滤是不在行列中存储具有相同值的多行 - 但是当你到达更新过程时,你会识别每一行行通过行列,这意味着它将更新行列中具有相同值的所有行。如果每行的行值都是唯一的,那么就不需要检查是否已经看过该行;如果它不是唯一的,那么在更新时你需要一个不同的标准。
如果直接运行更新,PHP将不需要使用大量内存,MySQL不必在更新期间搜索每一行;它可以一次性迭代它们。除非你在这里留下一些东西,否则你只需做一个简单的查询就会好得多。