所以我的模型中有这个查询。
$this->db->trans_begin();
$this->db->insert($somequeryhere);
$this->db->insert($somequeryhere2);
$this->db->insert($somequeryhere3);
$this->db->insert($somequeryhere4);
$this->db->update($somequeryhere7);
$this->db->update($somequeryhere21);
$this->db->delete($somequeryhere10);
if($this->db->trans_status() === FALSE){
$this->db->trans_rollback(); return false;
}else{
$this->db->trans_commit(); return true;
}
交易肯定运作良好。但是,当我尝试在查询过程中像下面的查询那样使PHP进程死亡时,这令人困惑。
$this->db->trans_begin();
$this->db->insert($somequeryhere);
$this->db->insert($somequeryhere2);
$this->db->insert($somequeryhere3);
$this->db->insert($somequeryhere4);
die;
$this->db->update($somequeryhere7);
$this->db->update($somequeryhere21);
$this->db->delete($somequeryhere10);
if($this->db->trans_status() === FALSE){
$this->db->trans_rollback(); return false;
}else{
$this->db->trans_commit(); return true;
}
交易仍然有效。我以为PHP尚未达到$this->db->trans_status()
,因此该事务将无法正常工作,但这也可以像使用或不使用$this->db->trans_status()
一样工作。有人可以解释一下吗?
我尝试使用$this->db->trans_start();
和$this->db->trans_complete();
,并且事务回滚仍然执行。
答案 0 :(得分:0)
如果在trans_begin()之后的代码中间放置一个Die。 如果您要检查插入更新数据的状态,则不得为此使用trans方法。
由于使用trans方法-必须提交或回滚才能执行查询
//$this->db->trans_begin();
$this->db->insert($somequeryhere);
$this->db->insert($somequeryhere2);
$this->db->insert($somequeryhere3);
$this->db->insert($somequeryhere4);
die;
$this->db->update($somequeryhere7);
$this->db->update($somequeryhere21);
$this->db->delete($somequeryhere10);