Codeigniter 3中的事务功能如何与查询一起使用?

时间:2019-05-07 03:05:35

标签: php transactions codeigniter-3

所以我的模型中有这个查询。

$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();,并且事务回滚仍然执行。

1 个答案:

答案 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);