2011-09-15 64 views
0

我執行(使用PDO),但是我需要抓住的第一個元素的插入ID在交易,比如交易:mysql事務 - 混合插入&select來獲得last_insert_id?

BEGIN 
INSERT INTO user (field1,field2) values (value1,value2) 
INSERT INTO user_option (user_id,field2) values (LAST_INSERT_ID(),value2); 
COMMIT; 

然後做PDO的東西:

[...] 
$pdo->execute(); 
$foo = $pdo->lastInsertId(); // This needs to be the id from the FIRST insert 

有沒有辦法從事務的第一個元素獲取最後一個插入ID?也許使用類似以下內容:

BEGIN 
INSERT INTO user (field1,field2) values (value1,value2) 
SELECT id AS user_id FROM user WHERE id=LAST_INSERT_ID() 
INSERT INTO user_option (user_id,field2) values (LAST_INSERT_ID(),value2); 
COMMIT; 

$pdo->execute(); 
$fooArray = $pdo->fetchAll(); 
$lastId = $fooArray[0]['user_id']; 

我是完全出去吃午飯用^?有一個更好的方法嗎?

編輯1

基礎上的建議,我已經更新了使用變量查詢...但是,我不知道如何檢索使用PDO的變量值。使用$ stmt-> fetchAll()只返回一個空數組;

BEGIN 
DECLARE User_ID int 
DECLARE Option_ID int 
INSERT INTO user (field1,field2) values (value1,value2); 
set User_ID = select LAST_INSERT_ID(); 
INSERT INTO user_option (user_id,field2) values (LAST_INSERT_ID(),value2); 
set Option_ID = select LAST_INSERT_ID(); 
select User_ID, Option_ID 
COMMIT; 

回答

2

你能做到這樣,就把價值爲變量,然後選擇它

BEGIN 
DECLARE User_ID int 
DECLARE Option_ID int 
INSERT INTO user (field1,field2) values (value1,value2); 
set User_ID = select LAST_INSERT_ID(); 
INSERT INTO user_option (user_id,field2) values (LAST_INSERT_ID(),value2); 
set Option_ID = select LAST_INSERT_ID(); 
select User_ID, Option_ID 
COMMIT; 
+1

啊,沒想過這樣做的,謝謝!但是......我將如何使用PDO檢索值?當我嘗試聲明 - > fetchAll()並打印結果時,它只是笑我,並返回一個空的數組:( –