使用具有多个 WHERE 条件的预准备语句进行更新查询


UPDATE query using prepared statement with multiple WHERE conditions

我需要执行以下查询,但将使用预准备语句。 请注意,WHERE 子句的数量将根据发送到服务器的数据而变化。

UPDATE bla SET x=123
WHERE (y=4 AND z=3)
OR (y=12 AND z=13)
OR (y=13 AND z=13)
OR (y=25 AND z=23)
OR (y=37 AND z=33)
OR (y=39 AND z=13)
OR (y=44 AND z=23)
OR (y=54 AND z=33)
OR (y=84 AND z=23)
OR (y=94 AND z=23)
OR (y=99 AND z=33);

我可以生成以下任一数组:

$arr=[12,13,13,13,25,23,27,33,39,13,44,23,54,33,83,23,94,23,99,33];

$arr=[[12,13],[13,13],[25,23],[37,33],[39,13],[44,23],[54,33],[84,23],[94,23],[99,33]];
最好

使用单个 UPDATE 查询或每对 10 个 UPDATE 查询来执行此操作?

如果是单个查询,最好的方法是什么?

使用使用 implodearray_map 构造的单个查询来执行此操作。

$where = implode(' OR ', array_map(function($e) {
    return "(y = $e[0] AND z = $e[1])";
}, $arr);
$sql = "UPDATE bla SET x = 123 WHERE $where";

在MySql中,你可以做元组比较。

所以你可以做这样的事情

UPDATE bla 
SET x=123
WHERE (x,y) in ((12,13),(13,13),(25,23),(37,33),(39,13),(44,23),(54,33),(84,23),(94,23),(99,33))