[英]mysql LAST_INSERT_ID not working through php
I tried two ways for reaching it this job: 我尝试了两种方法来完成这项工作:
multi_query: 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);
and transaction: 和交易:
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();
All the records are recorded well except song column on lyrics table, which takes NULL value. 除歌词表上的歌曲列外,所有记录均记录良好,其值为NULL 。
Can anyone help me with this? 谁能帮我这个?
Thanks! 谢谢!
This multiple queries are executed one by one after each one, so LAST_NSERT_ID() is applying against nothing. 此多个查询一个接一个地执行,因此LAST_NSERT_ID()对任何情况都不适用。
You can use a mix of this two techniques to reach what you need: 您可以结合使用这两种技术来达到所需的目的:
connection()->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);
connection()->query("START TRANSACTION;");
connection()->multi_query("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);");
connection()->query("COMMIT;");
connection()->commit();
connection()->close();
Now, the var is declared and used on the same query execution flow so it will work fine. 现在,声明了var并将其用于同一查询执行流,因此它将正常工作。
Cheers! 干杯!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.