【问题标题】:Mysqli transaction query over normal php mysqli query [duplicate]mysqli事务查询优于普通php mysqli查询[重复]
【发布时间】:2018-07-10 13:29:31
【问题描述】:

我正在尝试在 php mysqli 查询上使用 mysql 事务查询,如下所示:

$sql = "START TRANSACTION; 
        INSERT INTO songs (title, disco, deleted) VALUES ('".$titol."', '".$codi."', '0'); 
        SET @last_id = LAST_INSERT_ID(); 
        INSERT INTO lyrics (`lyricsOri`, `lyricsTra`, `song`, `deleted`) VALUES ('".$lyricsO."', '".$lyricsT."', @last_id, 0);  
        COMMIT;";
connection()->query($sql);

如果我在它之后得到$sql 值并将其作为 sql 命令复制粘贴到我的管理员的 php 中,它运行良好并且它完成了它应该做的事情但是,当我通过 php 运行它时它不起作用,我不知道为什么。

我知道我可以使用 php 本机事务,将其设置为 auto_commit(FALSE) 并在其上添加不同的查询以最终提交它,但在这种情况下,我想“按原样”使用 mysql 命令,我可以'找不到为什么它不能正常工作。

任何人看到故障或可以告诉我为什么它不起作用?

谢谢!

【问题讨论】:

  • 默认情况下,PHP mysql 的客户端不支持以分号; 分隔的多条SQL 语句。所以你需要使用多个查询调用。此外,您还应该阅读有关防止 SQL 注入的内容stackoverflow.com/questions/60174/…
  • 你试过用multi_query代替查询吗?

标签: php mysql mysqli transactions


【解决方案1】:

正如@raymond-nijland 指出的那样,PHP 客户端不支持用分号分隔的多个 SQL 语句。

但这是对的。 您可以使用 multi_query:

$sql = "START TRANSACTION; INSERT INTO songs (title, disco, deleted) VALUES ('".$titol."', '".$codi."', '0'); SET @last_id = LAST_INSERT_ID(); INSERT INTO lyrics (`lyricsOri`, `lyricsTra`, `song`, `deleted`) VALUES ('".$lyricsO."', '".$lyricsT."', @last_id, 0); COMMIT;";

connection()->multi_query($sql);

或者,正如您所写,使用 php 事务,这将带您获得相同的结果:

    connection()->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);
    connection()->query("START TRANSACTION;");
    connection()->query("INSERT INTO songs (title, disco, deleted) VALUES ('".$titol."', '".$codi."', '0');");
    connection()->query("SET @last_id = LAST_INSERT_ID();");
    connection()->query("INSERT INTO lyrics (`lyricsOri`, `lyricsTra`, `song`, `deleted`) VALUES ('".$lyricsO."', '".$lyricsT."', @last_id, 0);");
    connection()->query("COMMIT;");
    connection()->commit();
    connection()->close();

希望对你有帮助!

【讨论】:

  • 谢谢,我试试看! :)
  • 效果很好,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 2013-09-23
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
相关资源
最近更新 更多