PHP PDO:在单个查询中进行多个UPDATE操作

9 浏览
0 Comments

PHP PDO:在单个查询中进行多个UPDATE操作

我试图通过一个单独的pdo语句来运行以下内容:\n

UPDATE `coin_price` SET `coin_id` = 1 WHERE coin_id = 1;
UPDATE `coin_price` SET `coin_id` = 178 WHERE coin_id = 178;

\n但是我得到了以下异常:\n

\n您的SQL语法错误;请检查与您的MariaDB服务器版本相对应的手册,以查看在\'UPDATE `coin_price` SET `coin_id` = 178 WHERE coin_id = 178\'附近使用的正确语法。\n

\n我只是运行了以下代码:\n

$statement = $this->system[$location]["connection"]->prepare($sql);
$statement->execute();

\n并且得到了一个异常。我尝试了绑定和不绑定的方式。\n我所做的事情是不可能的吗?\n注意:这两个查询分别通过PDO运行良好。

0
0 Comments

问题原因:PHP的PDO只能一次执行一个查询,不能同时执行多个查询。

解决方法:可以将多个UPDATE语句合并成一个查询,使用CASE语句来更新多个字段的值。

以下是合并多个UPDATE语句的示例代码:

UPDATE coin_price
SET coin_id = 
    CASE coin_id
        WHEN 1 THEN 1
        WHEN 178 THEN 178
    END,
    field1 = 
    CASE coin_id
        WHEN 1 THEN 'value1'
        WHEN 178 THEN 'value2'
    END,
    field2 = 
    CASE coin_id
        WHEN 1 THEN 'value3'
        WHEN 178 THEN 'value4'
    END
WHERE coin_id IN (1, 178)

以上代码示例中,除了更新coin_id字段外,还更新了field1和field2字段的值。每个字段都使用了一个CASE表达式来分别赋予不同的值。

感谢您的回复。是否可以扩展这个方法来更新更多的字段?

是的,您可以指定多个列,每个列都可以包含一个CASE表达式来赋予相应的值。

参考重复的问题以获取示例代码。

0
0 Comments

当需要在PHP中执行多个UPDATE语句时,应避免尝试一次性运行多个语句,而是将它们分开运行。如果需要事务语义,可以将它们用START TRANSACTIONCOMMIT包围起来。如果不想在扣除一个金融账户的金额和向另一个账户存入金额之间出现崩溃的情况,这种方法是必要的。另一个解决方案是编写并调用一个存储过程来合并这些语句。如果担心性能问题,实际上涉及的时间非常短暂,几毫秒的时间可以忽略不计。

0