gpt4 book ai didi

php - Mysqli 事务查询优于普通 php mysqli 查询

转载 作者:行者123 更新时间:2023-11-29 17:20:50 34 4
gpt4 key购买 nike

我正在尝试在 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 native 事务,将其设置为 auto_commit(FALSE) 并在其上添加不同的查询以最终提交它,但在这种情况下,我想“按原样”使用 mysql 命令,并且我可以'找不到为什么它不能正常工作。

有人看到错误或可以告诉我为什么它不起作用吗?

谢谢!

最佳答案

正如 @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();

希望对你有帮助!

关于php - Mysqli 事务查询优于普通 php mysqli 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51266601/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com