MySQLi insert_id在事务后返回0

时间:2014-02-26 04:48:29

标签: php mysql transactions

我有以下代码:

<?php
    header('Content-Type: text/plain');
    $db = new mysqli('localhost', 'username', 'password', 'my_schema');
    $db->autocommit(false); // start transaction
    $sql = "INSERT INTO my_table (col1, col2) VALUES (1, 2)";
    $db->query($sql);
    // $last_id = $db->insert_id;
    // echo 'Last ID before commit: ' . $last_id . PHP_EOL;
    $db->commit();
    $db->autocommit(true); // end transaction
    $last_id = $db->insert_id;
    echo 'Last ID after commit: ' . $last_id . PHP_EOL;
    $db->close();
?>

上述代码的输出是:

Last ID before commit: 1 <-- if uncomment the 2 lines above, it will show this
Last ID after commit: 0

insert_idautocommit之外不起作用(返回0),即使它已正确提交&amp;插入数据库。这是预期的行为吗?

2 个答案:

答案 0 :(得分:1)

关于代码的一些事情:

  • 提交时,交易结束。提交后,您可以:创建新事务,将autocommit设置为true以恢复其上的默认行为,或关闭连接。
  • 您需要在提交之前获取insert_id。这有点奇怪的原因是,通常,当您进行交易时,需要外键的ID。

答案 1 :(得分:-2)

请试试这个

$last_id = mysqli_insert_id($link);

$link是使用mysqli_connect(...)的数据库对象。这将为您提供自动增量列

中最后一个插入行的ID