将多个foreach MySQL插入语句与PHP数组数据合并为一个

时间:2019-02-28 09:12:10

标签: php mysql sql database mysqli

我有一个包含不同项目及其各自值的PHP数组,并且需要为数据库中的每个项目更新每一行。有没有办法只执行一个查询,而不执行多个foreach查询?

foreach($array as $key=>$item){
    $image_id = $item['id'];
    $order_id = $item['order_id'];
    $sql = "UPDATE images SET order_id='$order_id' WHERE id='$image_id'";
    $query = mysqli_query($connection, $sql);
} // end for each

1 个答案:

答案 0 :(得分:3)

您无法真正使用UPDATE将其组合为一个查询,因为值和条件成对出现(要更新的每一行的值和条件都不同)。

INSERT INTO..ON DUPLICATE KEY UPDATE有一个漏洞修复程序,但我不会使用它-请参阅question linked by RiggsFolly in the comments

使用预备语句时,您可以多次执行相同的查询(即使使用mysqli_query(),无论如何都必须多次查询,但这在使用预备语句时是经过优化和更安全的)。

$sql = "UPDATE images SET order_id=? WHERE id=?";
$stmt = $connection->prepare($sql);
foreach($array as $key=>$item){
    $stmt->bind_param("ss", $item['order_id'], $item['id']);
    $stmt->execute();
}
$stmt->close();

如果您的ID是整数而不是字符串,请用s替换相应的i