准备和非准备语句的beginTransaction()和commit()

时间:2011-10-27 16:00:21

标签: php transactions pdo

我有以下代码:

try{
 $db->beginTransaction();
 $handler = $db->prepare(...);
 $handler->execute()
 $query2 = "INSERT INTO...";
 $db->exec($query2);
 $db->commit();
}catch (PDOException $e) {
 try { $db->rollBack(); } catch (Exception $e2) {}
}

我的问题是,rollBack()是否会回滚由execute()exec()引起的所有更改?使用exec()的原因是我必须动态创建$query2,这样对我来说就容易多了。

1 个答案:

答案 0 :(得分:1)

在事务开始和执行回滚的点之间执行的任何操作都是相反的。无论你如何进行这些操作 - 它们都会被回滚。

当然,这假设您正在使用具有事务功能的数据库/表。例如,如果您的exec()是在MySQL中的MyISAM表上完成的,并且在InnODB表上执行了execute(),那么InnoDB操作将被回滚,但是您仍然被困在MyISAM上。