我可以用CI进行多个事务更新吗?如果其中一个失败,可以全部回滚


can I make multiple transactional updates with CI and if one fails rollback them all?

我正在用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();

目前,我没有任何错误。。。并且似乎工作得很好,我不知道的是:

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

知道吗?谢谢

如果在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();
}