CI框架百问百答:CodeIgniter的事务用法?--第9问

做为一名码工,没用过事务,那也不是好码工。

CodeIgniter的数据库抽象允许你在支持事务安全的数据库表中使用事务。在MySQL中,你需要用InnoDB或BDB表而不是更常用的MyISAM。大多数其它的数据库平台都原生支持事务。

一起看看CodeIgniter的事务:

CodeIgniter 的事务方法

CodeIgniter 使用的事务方法与流行的数据库类ADODB所使用的处理过程非常相似。我们选择那种方法是因为它极大地简化了运行事务的处理过程。大多数情况下你只需要编写两行代码就行了。

传统上, 事务需要实现大量工作, 他们要求你随时跟踪你的查询, 并根据查询的成功或失败来决定  提交  还是  回滚 。这是特别麻烦的嵌套查询。相比之下, 我们实现了一种智能的事务系统, 它将自动地为你做这些事情(如果你选择手动管理你的事务, 这也是可以的, 但这确实没什么好处)。

运行事务

要使用事务来运行你的查询, 你可以使用如下所述的  $this->db->trans_start()  和  $this->db->trans_complete()  函数:

$this->db->trans_start();
$this->db->query('一条SQL查询...');
$this->db->query('另一条查询...');
$this->db->query('还有一条查询...');
$this->db->trans_complete();

在 start/complete 函数之间, 你想运行多少条查询都可以, 根据任何给定查询的成功或失败, 它们将被提交或者回滚。

严格模式(Strict Mode)

默认情况下, CodeIgniter 以 严格模式 运行所有事务。当严格模式被启用时, 如果你正在运行多组的事务, 只要有一组失败, 所有组都会被回滚。如果严格模式被禁用, 每一组都被视为独立的组, 这意味着其中一个组的失败不会影响其它组。

严格模式能以下面的方式禁用:

$this->db->trans_strict(FALSE);

管理错误信息

如果你在你的  config/database.php  文件中启用了错误报告, 当提交没有成功时, 你会看到一条标准的错误信息。如果调试被关闭, 你可以通过这种方式来管理你的错误信息:

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->trans_complete();

if ($this->db->trans_status() === FALSE)
{
    // 生成一条错误信息... 或者使用 log_message() 函数来记录你的错误信息
}

禁用事务

当你使用  $this->db->trans_start()  时, 事务就已经被自动启用了。如果你想要禁用事务, 你可以使用  $this->db->trans_off()  来实现:

$this->db->trans_off()

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();

当事务被禁用的时候, 你的查询将被自动提交, 就像没有使用事务时那样。

测试模式(Test Mode)

你可以选择性地将事务系统设置到 "测试模式" , 这将导致你的查询被回滚 -- 尽管查询会生成有效结果。要使用测试模式, 只需将  $this->db->trans_start()  函数的第一个参数设置为  TRUE  即可:

$this->db->trans_start(TRUE); // 查询将被回滚
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();

手动运行事务

如果你想要手动运行事务, 可以使用下面的方法:

$this->db->trans_begin();

$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');

if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

说明:  手动运行事务时, 请务必使用  $this->db->trans_begin()  函数, 而 不是  $this->db->trans_start() .

ci事务的更多相关文章

  1. CI框架--事务

    CI框架中事务封装的很完善,使用起来很简单 1.不开启事务 //不开启事务 前两个sql 能够执行成功,第三个执行失败 $this->device_model->addForCamera( ...

  2. CI框架的事务开启、提交和回滚

    1.运行事务 $this->db->trans_start(); // 开启事务$this->db->query('一条SQL查询...');$this->db-> ...

  3. CI框架笔记

    @update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...

  4. **【ci框架】精通CodeIgniter框架

    http://blog.csdn.net/yanhui_wei/article/details/25803945 一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架 ...

  5. CI框架大纲总结

    一.大纲 1.codeigniter框架的授课内容安排 2.codeigniter框架的简介 |-----关于框架的概念 |-----使用CI框架的好处 |-----为什么选择CI框架 3.codei ...

  6. 21. 无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务”

    无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务” 原因:调用存储过程的方式有问题,必须用JDBC方式调用存储过程才可以正常 ...

  7. CI(-)框架结构

    一 CI 是什么 CodeIgniter is an Application Development Framework - a toolkit - for people who build web ...

  8. PHP CI框架最近学到的内容

    CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...

  9. SQL SERVER 事务日志 解析

    1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录形式需要根据数据库的恢复模式来确定,数据库恢复模式有三种: 完整模式,完全记录事物日志,需要定期进行 ...

随机推荐

  1. 基于Doxygen_C语言代码文档一键生成的记录与规范(嵌入式适用)

    下位机代码格式规范整合记录 注册 doxygen 账号获取doxygen 的 *.exe 执行文件 https://pan.baidu.com/s/1MF5v-Ts80BysmZtXSqONmg 提取 ...

  2. .Net 两个对像之间的映射 (一 )

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. 第三次预作业20155231邵煜楠:虚拟机上的Linux学习

    java第三次预作业--虚拟机初体验(学习记录) 学习在笔记本上安装Linux操作系统 通过老师给予的官网链接,下载了VirtualBox-5.1.14-112924-win和Ubuntu-16.04 ...

  4. 20155329胡佩伦 《Java程序设计》第3周学习总结

    学号 2016-2017-20155329胡佩伦 <Java程序设计>第3周学习总结 教材学习内容总结 本周复习巩固了运算符. 前缀自增自减法(++i,--i): 先进行自增或者自减运算, ...

  5. aspnetcore 2.1 发布到树莓派3linux的艰辛路程

    发布至docker for windows. 提示: image operating system "windows" cannot be used on this platfor ...

  6. Oracle dba权限下修改用户密码 授予用户权限 解锁用户

    1.修改用户密码 alter user scott identified by 123 2.授予用户权限 grant connect,resource to scott 3.解锁用户 alter us ...

  7. Maven学习(十三)-----Maven 构建生命周期

    Maven 构建生命周期 构建生命周期是什么? 构建生命周期阶段的目标是执行顺序是一个良好定义的序列. 这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段: 阶段 处理 描述 准 ...

  8. Python中的解决中文字符编码的问题

    python3中str默认为Unicode的编码格式 python2中str默认为bytes类型的编码格式 Unicode是一32位编码格式,不适合用来传输和存储,所以必须转换成utf-8,gbk等等 ...

  9. 拼多多商品id怎么查看 拼多多店铺ID怎样看

    网上开店平台有很多编号.id等可以区分商品和店铺的标志,拼多多有店铺id也有商品id,这是两个不同的概念,店铺id进入到拼多多店铺即可查询,拼多多商品id怎么查看 拼多多店铺ID怎样看,那么拼多多商品 ...

  10. NOIP2018出征策

    蒟蒻的风之旅人即将退役,现在分享一下退休前的故事 首先,经过这么多时间的划水训练,我成功从一个萌新变成了一个蒟蒻.我学会了各种奇怪玄学的算法,比如说昨天老师讲的NOIP第三题通用的算法,叫做XG算法, ...