【问题标题】:mysql transaction - mixing insert & select to attain last_insert_id?mysql 事务 - 混合插入和选择以获得 last_insert_id?
【发布时间】:2011-09-15 18:38:14
【问题描述】:

我正在执行一个事务(使用 PDO),但是我需要获取事务中第一个元素的插入 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;

【问题讨论】:

    标签: php mysql database transactions pdo


    【解决方案1】:

    您可以这样做,将值放入变量然后选择它

    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;
    

    【讨论】:

    • 啊,没想到会这样,谢谢!但是......我将如何使用 PDO 检索值?当我尝试 statement->fetchAll() 并打印结果时,它只是嘲笑我并返回一个空数组:(
    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 2012-07-29
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多