请问这段实现双表数据插入的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
相关产品推荐
相关产品推荐

