首页 > 解决方案 > 带有插入和提取输出错误的 PDO 事务语句

问题描述

$tr = $connection->prepare("
        START TRANSACTION;
            INSERT INTO data(name, address, dated) VALUES('Umesh', 'Kathmandu', NOW());
            SET @DataID:= LAST_INSERT_ID();
            INSERT INTO activity(data_id, activity, dated) VALUES(@DataID, 'Test Implemented', NOW() );
           SET @ActID:= LAST_INSERT_ID();
           SELECT @DataID as data_id, @ActID as activity_id;
        COMMIT;
");

$tr->execute();

$os = $tr->fetch(PDO::FETCH_ASSOC);

print_r($os);

我只是想同时输出last_insert_id()作为输出,查询运行良好,并且我成功地将数据插入到两个表中。

但它显示我的错误$os = $tr->fetch(PDO::FETCH_ASSOC);

标签: phpmysqlpdo

解决方案


您永远不应该使用单个调用执行多个语句。如果您使用本地准备,它将无法正常工作,并且很难正确处理。

将其拆分为多个语句并使用 PDO 的函数来获取最后插入的 ID。

$connection->beginTransaction();

$tr = $connection->prepare("INSERT INTO data(name, address, dated) VALUES('Umesh', 'Kathmandu', NOW())");
$tr->execute();
$DataID = $connection->lastInsertId();

$tr = $connection->prepare("INSERT INTO activity(data_id, activity, dated) VALUES(:DataID, 'Test Implemented', NOW() )");
$tr->execute(['DataID' => $DataID]);
$ActID = $connection->lastInsertId();

$connection->commit();


print_r($DataID, $ActID);

推荐阅读