简体   繁体   English

mysql事务 - 混合插入和选择以获得last_insert_id?

[英]mysql transaction - mixing insert & select to attain last_insert_id?

I'm performing a transaction (using PDO), however I need to grab the insert id of the first element in the transaction, for example: 我正在执行一个事务(使用PDO),但是我需要获取事务中第一个元素的插入ID,例如:

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

Then do the pdo stuff: 然后做pdo的东西:

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

Is there a way to get the last insert id from the first element in a transaction? 有没有办法从事务中的第一个元素获取最后一个插入ID? Perhaps using something like the following: 也许使用以下内容:

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'];

Am I completely out to lunch with ^ ? ^我完全和^共进午餐吗? Is there a better way to do this? 有一个更好的方法吗?

EDIT 1 编辑1

Based on suggestion, i've updated the query to use variables... however, i don't know how to retrieve the variable values using PDO. 根据建议,我已更新查询以使用变量...但是,我不知道如何使用PDO检索变量值。 Using $stmt->fetchAll() just returns an empty array; 使用$ 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;

You can do it this way, put the value into variable then just select it 您可以这样做,将值放入变量然后选择它

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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM