【问题标题】:PHP PDO : Multiple UPDATE in a single query [duplicate]PHP PDO:单个查询中的多个更新[重复]
【发布时间】:2020-11-04 09:06:30
【问题描述】:

我正在尝试通过单个 pdo 语句运行以下命令

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

我得到以下异常

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

我只是在跑步

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

并获得异常。我试过绑定和不绑定。

我正在做的事情不可能吗?

注意:两个查询都可以通过 PDO 自行运行

【问题讨论】:

  • 为什么要将coin_id 设置为它已有的值?
  • 当您可以一次处理多个更新查询时,运行多个更新查询毫无意义。将 coin_id 设置为已经分配的值也没有意义。
  • 这只是我用于测试的示例查询
  • 我不想使用 ON DUPLICATE KEY 因为我想维护增量 ID @cetver

标签: php mysql mariadb


【解决方案1】:

不要尝试一次运行多个语句。

分别运行它们。但是,如果您需要事务语义,请使用 START TRANSACTIONCOMMIT。 (示例:您不希望在借记一个金融账户和贷记另一个金融账户之间发生崩溃。)

另一个计划是编写和CALL 一个存储过程来组合语句。

如果您关心性能,那么您所说的是几毫秒。

【讨论】:

    【解决方案2】:

    您一次只能执行一个查询。但是您可以将它们组合成一个查询:

    UPDATE coin_price
    SET coin_id = 
        CASE coin_id
            WHEN 1 THEN 1
            WHEN 178 THEN 178
        END
    WHERE coin_id IN (1, 178)
    

    【讨论】:

    • 感谢您的回复。是否可以扩展它以根据需要更新尽可能多的字段?
    • 是的,您可以分配多个列,并且每个列都可以包含CASE 表达式以分配适当的值。
    • 查看重复问题的示例。
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2014-03-02
    • 2019-05-26
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多