-1

假设我开始一个事务,然后通过提交完成它:

$db->beginTransaction();
// sql insert
// another sql insert
// a sql update
// another sql update
$db->commit();

我可以在 commit() 之后运行一个函数来恢复 beginTransaction 和 commit() 之间所做的所有更改吗?

4

2 回答 2

1

提交后,您无法恢复更改以进行恢复,您应该rollback改为调用。

回滚操作主要在事务中的任何一个实体失败时完成。因此,要捕获失败,您应该使用try{}catch{}

$db->beginTransaction();
 try{
         $db->commit();//writes all data to database and reach to new state
 }catch(Exception $e)
  {
      $db->rollback();//roll back all changes made to database 
      echo  $e->getTraceAsString();
 }
于 2013-07-15T11:54:37.773 回答
0

这将恢复当前事务的更改:

$db->rollBack();

但是,您不能在提交后回滚。

如果您试图防止插入错误等。我会试试这个:

try
{
    $db->beginTransaction();
    // sql insert
    // another sql insert
    // a sql update
    // another sql update
    $db->commit();

}
catch( Zend_Exception $e)
{
    $db->rollBack();
}

如果没有错误,这将提交,如果有,则回滚。

于 2013-07-15T12:00:15.050 回答