【问题标题】:mysql LAST_INSERT_ID not working through phpmysql LAST_INSERT_ID 无法通过 php 工作
【发布时间】:2018-12-18 12:35:12
【问题描述】:

我尝试了两种方法来完成这项工作:

多查询:

$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);

和交易:

    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();

除了歌词表中的歌曲列取NULL值外,所有的记录都记录好了。

谁能帮我解决这个问题?

谢谢!

【问题讨论】:

标签: php mysql transactions last-insert-id multi-query


【解决方案1】:

这多个查询一个接一个地执行,所以 LAST_NSERT_ID() 什么都不应用。

您可以混合使用这两种技术来满足您的需求:

        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();

现在,在同一个查询执行流程中声明并使用了 var,因此它可以正常工作。

干杯!

【讨论】:

  • @jDoe 如果可行,请接受此答案以结束您的问题。
  • 对不起,所以我不让我这样做,因为它已经过去了一段时间,就这样做了!
猜你喜欢
  • 1970-01-01
  • 2011-03-26
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多