我正在尝试通过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命令“按原样”,并且我可以找不到为什么它无法正常工作。
有人看到故障或可以告诉我为什么它不起作用吗?
谢谢!
答案 0 :(得分:0)
@ 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();
希望有帮助!