假设我启动一个事务,然后用提交完成它:
$db->beginTransaction();
// sql insert
// another sql insert
// a sql update
// another sql update
$db->commit();
有没有一个函数可以在commit()之后运行,以恢复beginTransaction和commit(()之间所做的所有更改?
提交后,您无法恢复更改,应改为调用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();
}
这将恢复当前事务的更改:
$db->rollBack();
但是,在提交之后不能回滚。
如果你试图防止插入错误等,我会尝试这个:
try
{
$db->beginTransaction();
// sql insert
// another sql insert
// a sql update
// another sql update
$db->commit();
}
catch( Zend_Exception $e)
{
$db->rollBack();
}
如果没有错误,这将提交,如果有错误,则回滚。