php - 带有插入和提取输出错误的 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);
解决方案
您永远不应该使用单个调用执行多个语句。如果您使用本地准备,它将无法正常工作,并且很难正确处理。
将其拆分为多个语句并使用 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);
推荐阅读
- c# - 如何修复表截断的 SQL 注入问题
- flutter - 如何解决flutter中的一堆卡片布局问题
- python - 用 Python 抓取 Edmunds.com 网站时如何处理读取超时错误?
- c++ - 使用 C++ 使用 Shunting Yard 算法处理括号
- javascript - 当只有一个函数应该运行时,两个函数运行
- html - 为什么通过vue组件渲染行时表格样式会移出
- python - 使用 Glue 将数据从 RDS 移动到 S3
- html - 按此顺序显示 .div 或图像
- reactjs - React - 在添加时淡入,在删除项目时淡出
- python - /articles/article/19 处的 ValueError 'article_image' 属性没有与之关联的文件