Php 优化对MYSQL的foreach循环写入

Php 优化对MYSQL的foreach循环写入,php,mysql,pdo,Php,Mysql,Pdo,我有一个数据表,其中我在一个事务中更新了多行。下面的Foreach循环工作得很好,但是,如果表包含大量行,则可能会有相当大的延迟,而整个表是逐行工作的 即使我只改变一行中的一个字段,也会有一个显著的延迟(20秒),我再次假设这是因为循环正在通过每一行工作 //get data from form $id2 = $_POST['id2']; $status2 = $_POST['status2']; $comment = $_POST['comments2']; foreach ($id2 as

我有一个数据表,其中我在一个事务中更新了多行。下面的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_查询现在已经很老了,所以如果有一个PDO方法来实现这一点,那就更好了。我对PDO一点也不了解:-/

非常感谢,,
Jason

从合并到单个更新开始:

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注入

这两个查询是否都在更新同一表的同一行(如您的示例所示)?我想和你谈谈@是的,没错。每行中可能有两个字段在此查询中更新,但是我有同一查询的其他版本,其中每行中可能有五到六个字段可以(但不总是)更新。Mark Baker的答案就是您要查找的。编写一些javascript来检测用户更改的字段,并且只提交那些。现在你正在更新页面上的所有内容,甚至是那些没有更新的内容。太棒了,谢谢你。我没有意识到我可以合并到一个更新中。我现在就做。这很好,对测试数据库产生了影响。我正要去看现场直播。。。非常感谢你的迅速帮助。