Codeigniter框架的更新事务(transaction)BUG及解决方法
更新时间:2014年07月25日 11:05:15 投稿:junjie
这篇文章主要介绍了Codeigniter框架的更新事务(transaction)BUG及解决方法,具体BUG和解决办法在文中有详细描述,需要的朋友可以参考下
由于ci事务判断出错回滚的条件是语句是否执行成功,而更新操作时,就算影响的条数为0,sql语句执行的结果过仍然为1,因为它执行成功了,只是影响的条数为0。
下面介绍解决这个问题的方法:
对于一次要执行许多的语句的事务
只需在更新操作下根据影响条数是否为0来决定是否会滚即可,下面假设第二条语句为更新操作。
复制代码 代码如下:
//采用 Codeigniter 事务的手动模式
$this->db->trans_strict(FALSE);
$this->db->trans_begin();
$this->db->query('SELECT ...');//SELECT 操作无需特殊处理
$this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理
$this->db->query('UPDATE ...');
if (!$this->db->affacted_rows()) {//上面的 UPDATE 失败则回滚
$this->db->trans_rollback();
//@todo 异常处理部分
exit();//需要终止或跳出,以免下面的 SQL 代码继续执行!
}
$this->db->query('DELETE ...');
if (!$this->db->affacted_rows()) {//上面的 DELETE 失败则回滚
$this->db->trans_rollback();
//@todo 异常处理部分
exit();//需要终止或跳出,以免下面的 SQL 代码继续执行!
}
$this->db->query('SELECT ...');//SELECT 操作无需特殊处理
$this->db->query('INSERT ...');//INSERT 出错会有 Codeigniter 自动处理
if ($this->db->trans_status() === TRUE) {
$this->db->trans_commit();
} else {
$this->db->trans_rollback();
//@todo 异常处理部分
}
如果一次执行的语句不是很多,可以在最后做一下判断来决定回滚
若语句中没有更新操作,用自动事务就可以。
您可能感兴趣的文章:
- apache+codeigniter 通过.htcaccess做动态二级域名解析
- CI框架给视图添加动态数据
- Cisco 路由器动态和静态地址转换
- CI(CodeIgniter)框架中的增删改查操作
- 在CODEIGNITER中 在CI中引入外部的JS与CSS呢
- Codeigniter(CI)框架分页函数及相关知识
- CI(CodeIgniter)框架介绍
- CI(CodeIgniter)框架配置
- CodeIgniter模板引擎使用实例
- php之CodeIgniter学习笔记
- Codeigniter注册登录代码示例
- 解析CodeIgniter自定义配置文件
- 基于Codeigniter框架实现的student信息系统站点动态发布功能详解
相关文章
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
这篇文章主要介绍了WordPress中访客登陆实现邮件提醒的PHP脚本实例分享,类似于社交网站的异地IP登陆提醒,不过IP所在地显示的实现并没有在本文介绍范围中,需要的朋友可以参考下2015-12-12PHP使用fopen与file_get_contents读取文件实例分享
这篇文章主要介绍了PHP使用fopen与file_get_contents读取文件实例分享的相关资料,需要的朋友可以参考下2016-03-03Zend Framework实现留言本分页功能(附demo源码下载)
这篇文章主要介绍了Zend Framework实现留言本分页功能,详细分析了Zend Framework实现留言本所涉及的控制器动作,分页样式及模板调用技巧,并附代码demo源码供读者下载参考,需要的朋友可以参考下2016-03-03php使用array_chunk函数将一个数组分割成多个数组
这篇文章主要介绍了php使用array_chunk函数将一个数组分割成多个数组,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-12-12
最新评论