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

时间:2016-03-03 19:49:44

标签: php mysql pdo prepared-statement

我需要执行以下查询,但是将使用预准备语句。请注意,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查询?

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

2 个答案:

答案 0 :(得分:2)

使用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";

答案 1 :(得分:1)

在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))