2011-09-15 5 views
0

私は(PDOを使用して)トランザクションを実行していますが、しかし私は、たとえば、トランザクションの最初の要素の挿入IDを取得する必要があり:mysqlトランザクション - 挿入と選択を組み合わせて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']; 

私は完全に昼食をとっていますか?これを行うより良い方法はありますか?提案に基づいて

EDIT 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を使用して値をどのくらい正確に取得できますか?私がstatement-> fetchAll()を試して結果を表示すると、私は笑って空の配列を返します: –

関連する問題