目录搜索
欢迎目录快速参考图基本信息服务器要求许可协议变更记录关于CodeIgniter安装下载 CodeIgniter安装指导从老版本升级疑难解答介绍开始CodeIgniter 是什么?CodeIgniter 速记表支持特性应用程序流程图模型-视图-控制器架构目标教程内容提要加载静态内容创建新闻条目读取新闻条目结束语常规主题CodeIgniter URL控制器保留字视图模型辅助函数使用 CodeIgniter 类库创建你自己的类库使用 CodeIgniter 适配器创建适配器创建核心系统类钩子 - 扩展框架的核心自动装载资源公共函数URI 路由错误处理缓存调试应用程序以CLI方式运行管理应用程序处理多环境PHP替代语法安全开发规范类库参考基准测试类日历类购物车类配置类Email 类加密类文件上传类表单验证详解FTP 类图像处理类输入类Javascript 类语言类装载类迁移类输出类分页类模板解析器类安全类Session 类HTML 表格类引用通告类排版类单元测试类URI 类User-Agent 类表单验证XML-RPC 和 XML-RPC 服务器Zip 编码类缓存适配器适配器参考适配器数据库类Active Record 类数据库缓存类自定义函数调用数据库配置连接你的数据库数据库快速入门例子代码字段数据数据库维护类查询辅助函数数据库类查询生成查询记录集表数据事务数据库工具类JavaScript类辅助函数参考数组辅助函数CAPTCHA 辅助函数Cookie Helper日期辅助函数目录辅助函数下载辅助函数Email 辅助函数文件辅助函数表单辅助函数HTML辅助函数Inflector 辅助函数语言辅助函数数字辅助函数路径辅助函数安全辅助函数表情辅助函数字符串辅助函数文本辅助函数排版辅助函数URL 辅助函数XML 辅助函数
文字

CodeIgniter 用户指南 版本 2.1.0

编辑文档、查看近期更改请 登录 或 注册  找回密码
查看原文

事务

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

如果你对事务不熟悉,我们建议您上网寻找相关资源学习。以下信息假设你已经明白事务的相关概念。

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().

 

翻译贡献者: Drice, Hex, iptton, yinzhili
最后修改: 2010-10-22 11:07:30
上一篇:下一篇: