我可以使用CI进行多个事务更新,如果一个失败则将它们全部回滚吗?

时间:2014-09-25 18:46:07

标签: php codeigniter

我正在使用CodeIgniter对多个条目进行更新,我怀疑是否正确使用了该事务...现在我有了这个

$this->db->trans_begin();
foreach ($query->result_array() as $b){
    try{
       $querystring = "somemysql to update... pure mysql";  
       $query = $this->db->query($querystring);
    }catch(Exception $e){
        $this->db->trans_rollback();
    }
}
$this->db->trans_commit();

目前,我没有收到任何错误......似乎工作正常,我不知道的是:

如果im更新4/100让我们说,这只会回滚#4吗?还是#1,#2,#3?

有什么想法吗? 感谢。

1 个答案:

答案 0 :(得分:2)

你写这个的方式,如果4上有例外; 1,2,3将被回滚..

但是它会继续5+,大概这不是你想要的!

我还假设trans_rollback()结束了事务,因此下一个查询将在事务之外运行,如果发生另一个异常,则不会回滚。您甚至可能会在trans_commit()或其他尝试的trans_rollback()上收到未被捕获的例外情况。

我猜你想要的是:

$this->db->trans_begin();
try{
  foreach ($query->result_array() as $b){
    $querystring = "somemysql to update... pure mysql"; 
    $query = $this->db->query($querystring);
  }
  $this->db->trans_commit();
}
catch(Exception $e){
  $this->db->trans_rollback();
}