假设我开始一个事务,然后通过提交完成它:
$db->beginTransaction();
// sql insert
// another sql insert
// a sql update
// another sql update
$db->commit();
我是否可以在commit()之后运行一个函数来恢复beginTransaction和commit()之间的所有更改?
答案 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();
}
如果没有错误,则提交;如果有错误则返回。