当前位置:首页 > CMS教程 > 其它CMS > 列表

Codeigniter框架的更新事务(transaction)BUG及解决方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-24 16:52:32 浏览: 评论:0 

这篇文章主要介绍了Codeigniter框架的更新事务(transaction)BUG及解决方法,具体BUG和解决办法在文中有详细描述,需要的朋友可以参考下

由于ci事务判断出错回滚的条件是语句是否执行成功,而更新操作时,就算影响的条数为0,sql语句执行的结果过仍然为1,因为它执行成功了,只是影响的条数为0。

下面介绍解决这个问题的方法:

对于一次要执行许多的语句的事务

只需在更新操作下根据影响条数是否为0来决定是否会滚即可,下面假设第二条语句为更新操作。

代码如下:

  1. //采用 Codeigniter 事务的手动模式 
  2.     $this->db->trans_strict(FALSE); 
  3.     $this->db->trans_begin(); 
  4.         
  5.     $this->db->query('SELECT ...');//SELECT 操作无需特殊处理 
  6.     $this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理 
  7.         
  8.     $this->db->query('UPDATE ...'); 
  9.     if (!$this->db->affacted_rows()) {//上面的 UPDATE 失败则回滚 
  10.         $this->db->trans_rollback(); 
  11.         //@todo 异常处理部分 
  12.         exit();//需要终止或跳出,以免下面的 SQL 代码继续执行! 
  13.     } 
  14.         
  15.     $this->db->query('DELETE ...'); 
  16.     if (!$this->db->affacted_rows()) {//上面的 DELETE 失败则回滚 
  17.         $this->db->trans_rollback(); 
  18.         //@todo 异常处理部分 
  19.         exit();//需要终止或跳出,以免下面的 SQL 代码继续执行! 
  20.     } 
  21.         
  22.     $this->db->query('SELECT ...');//SELECT 操作无需特殊处理 
  23.     $this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理 
  24.         
  25.     if ($this->db->trans_status() === TRUE) { 
  26.         $this->db->trans_commit(); 
  27.     } else { 
  28.         $this->db->trans_rollback(); 
  29.         //@todo 异常处理部分 
  30.     } 

如果一次执行的语句不是很多,可以在最后做一下判断来决定回滚

若语句中没有更新操作,用自动事务就可以。

Tags: Codeigniter框架 transaction

分享到: