我有以下代码:
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
,这样对我来说就容易多了。
答案 0 :(得分:1)
在事务开始和执行回滚的点之间执行的任何操作都是相反的。无论你如何进行这些操作 - 它们都会被回滚。
当然,这假设您正在使用具有事务功能的数据库/表。例如,如果您的exec()是在MySQL中的MyISAM表上完成的,并且在InnODB表上执行了execute(),那么InnoDB操作将被回滚,但是您仍然被困在MyISAM上。