我有以下代码:
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
,这样对我来说更容易。
在事务开始和回滚点之间执行的任何操作都将被反转。不管你怎么做这些操作,它们都会被回滚。
当然,这假设您正在使用具有事务功能的数据库/表。例如,如果你的exec()是在MySQL的MyISAM表上执行的,而execute()是在InnODB表上执行的,那么InnODB的操作将被回滚,但是你被卡在MyISAM表上。