2012-07-31 38 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()