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