You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问这段实现双表数据插入的PDO事务代码是否能正常运行?

这段PDO事务代码存在几个问题,无法直接正确运行

先拆解一下代码里的关键问题点:

  • 孤立的数组代码毫无作用:第一行的array(PDO::ATTR_PERSISTENT => true);是单独的一行,既没有赋值给任何变量,也没有作为PDO实例化的参数传入。如果你的意图是启用持久化连接,应该在创建PDO对象时把这个数组作为第四个参数传递,比如:

    $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
    

    现在这行代码完全是冗余的,不会产生任何实际效果。

  • 潜在的SQL语法/类型匹配问题:

    • 插入users表的语句中,password字段的值2002没有加单引号。如果这个字段是字符串类型(通常密码会存储哈希后的字符串),数据库可能会报错或者进行不符合预期的类型转换;如果是整数类型则没问题,但用整数存储密码本身就不符合安全规范。
    • 插入table_11的语句中,user_id1的值'130'加了单引号。如果这个字段是整数类型,虽然大部分数据库会自动转换,但严格来说应该去掉引号,直接使用数字值130更规范。
  • 异常处理的边界漏洞:如果$db本身没有成功实例化(比如数据库连接失败),进入catch块后调用$db->rollBack();会触发新的错误,因为此时$db是未定义的。你需要先确保$db已经正确创建,再执行后续的事务逻辑。

如果修正了以上问题——移除冗余代码、调整SQL语句的字段值格式、确保$db实例化成功,那么这段代码的事务逻辑本身(beginTransaction、exec、commit、rollBack的调用流程)是符合PDO事务规范的,能够实现「两个插入要么都成功,要么都回滚」的预期效果。

内容的提问来源于stack exchange,提问作者user9317569

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:20:04