beginTransaction()和commit()用于预处理语句和非预处理语句


beginTransaction() and commit() for prepared and nonprepared statements

我有以下代码:

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表上。