PHP/MYSQL如何在事务中获取last_insert_id

5

I have 2 MySQL tables

table#1 - container:

container_id INT (PK AI)
start_time DATETIME

表格#2 - 预定

reservation_id INT (PK AI) 
reservation_time DATETIME
container_id INT (FK)

PHP 代码:

mysqli_query($dbc,'SET AUTOCOMMIT=0');
mysqli_query($dbc,'START TRANSACTION');

$q1 = "INSERT INTO container (start_time) VALUES
      ('2012-07-03 11:00:00')";
$q2 = "INSERT INTO reservation (reservation_time, container_id) VALUES
      ('2012-07-03 11:00:00', LAST_INSERT_ID())";

$r1 = mysqli_query($dbc, $q1);
$r2 = mysqli_query($dbc, $q2);

if ($r1 && r2){
    mysqli_query($dbc, 'COMMIT');
} else {
    mysqli_query($dbc, 'ROLLBACK');
}

我做错了什么?$r2 返回 false。LAST_INSERT_ID() 不起作用。

1
你可能需要在 r2 调用后添加实际的“显示错误”代码以获取错误信息(查找一下,我不确定具体怎么写,但你要找到 or die(mysql_error()); 或类似的语句)。 - Nanne
你的 container.container_id 是自增主键吗?如果不是,就永远不会有 last_insert_id()。 - Marc B
@MarcB提到container_id是自增的。container_id INT(PK AI),PK代表主键,AI代表自动增量。 - Mihai Stancu
@mihai:除了我的问题,我没有看到任何关于auto_increment的提及。 - Marc B
抱歉朋友们!上面的代码是正确的。我在我的项目中编写的代码中犯了语法错误。 - bilasek
1个回答

4

LAST_INSERT_ID() 在任何情况下都可以使用,无论是事务、用户定义的存储过程还是用户定义的函数。

你的问题肯定不是 LAST_INSERT_ID(),而更可能是代码的其他部分出现了问题。

尝试检查是否有错误,并输出错误信息以便能够阅读错误消息并采取相应措施。

使用 mysql_error() 进行检查。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接