我有一个包含不同项目及其各自值的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
答案 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
。