Zend:回滚提交?

时间:2013-07-15 11:52:09

标签: postgresql zend-framework

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

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

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

2 个答案:

答案 0 :(得分: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();
 }

答案 1 :(得分: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();
}

如果没有错误,则提交;如果有错误则返回。