2012-07-31 40 views
4

我有2个MySQL表的PHP/MySQL如何让LAST_INSERT_ID在交易

表#1 - 集装箱:

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调用后添加实际的“显示错误”代码以获取错误。 (查看它,我不知道它是如何从头顶开始的,但是你正在寻找'或者死亡(mysql_error());'或者类似的东西) – Nanne 2012-07-31 16:46:59

+0

你的container.container_id是一个auto_increment PK吗?没有这个,永远不会是last_insert_id()。 – 2012-07-31 16:51:11

+0

@MarcB他提到container_id是自动递增的。 'container_id INT(PK AI)',PK代表主键,AI代表自动增量。 – 2012-07-31 16:52:46

回答

4

LAST_INSERT_ID()在任何情况下工作,无论是事务处理还是用户定义的存储过程或用户定义的函数。

你的问题绝对不是LAST_INSERT_ID(),但更可能是你的代码的任何其他部分失败。

尝试检查是否有错误并输出错误以便能够读取错误消息并相应地执行。

为此使用mysql_error()