PDO事务中回滚的具体步骤如下:
1. 开启事务
调用 beginTransaction() 方法启动事务,关闭自动提交模式(AutoCommit)。 此时所有后续操作将被视为原子操作组。
2. 执行数据库操作
在事务中执行SQL语句(如INSERT/UPDATE/DELETE),数据修改暂存于内存,尚未持久化到磁盘。 例如:
$pdo->exec("UPDATE accounts SET balance=balance-100 WHERE user_id=1");3. 检测异常
通过 try/catch 捕获操作中可能出现的异常:
主键冲突
字段类型错误
SQL语法错误
4. 执行回滚
在 catch 块中调用 rollBack() 方法撤销所有未提交的操作:
$pdo->rollBack(); // 撤销事务内所有操作
5. 关键注意事项
前置检查:调用
rollBack()前需通过inTransaction()确认事务是否活跃,避免在非事务状态下回滚引发错误。引擎支持:仅InnoDB等支持事务的引擎有效(MyISAM无效)。
连接配置:需禁用自动提交(
PDO::ATTR_AUTOCOMMIT=>0)。
流程对比表
典型错误场景
重复主键插入导致回滚
长事务超时自动回滚
字段类型不匹配触发回滚