我有一个数据表,我在一个事务中更新多行。下面的Foreach循环工作正常,但是如果表包含大量行,则会有一个相当大的延迟,大概是整个表都是逐行处理的。
即使我只在一行中更改一个字段,也会有一个显着的延迟(20秒),我假设这是因为循环正在通过每一行。
//get data from form
$id2 = $_POST['id2'];
$status2 = $_POST['status2'];
$comment = $_POST['comments2'];
foreach ($id2 as $key2 => $value2){
$query3 = "UPDATE newthing SET comments='$comment[$key2]' WHERE id = $value2 ";
$query4 = "UPDATE newthing SET status='$status2[$key2]' WHERE id = $value2 ";
//execute query
mysql_query($query3);
mysql_query($query4);
}
是否有更有效的方式来完成这项任务?如果有一个java / ajax /任何其他类型的工具,我愿意按要求学习。另外,我知道mysql_query现在已经老了,所以如果有这样的PDO方法,那就更好了。我还没有完全了解PDO: - /
非常感谢, 杰森
答案 0 :(得分:2)
首先合并为一个更新:
foreach ($id2 as $key2 => $value2){
$query3 = "UPDATE newthing SET comments='$comment[$key2]', status='$status2[$key2]' WHERE id = $value2 ";
//execute query
mysql_query($query3);
}
然后开始学习使用MySQLi或PDO扩展的预准备语句/绑定变量来替换不推荐使用的MySQL扩展,并帮助防止SQL注入