zoukankan      html  css  js  c++  java
  • php CI 框架 mysql 事务使用

    php CI 文档地址 http://codeigniter.org.cn/user_guide/index.html

    事务

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

  • 相关阅读:
    java web项目打包.war格式
    version 1.4.2-04 of the jvm is not suitable for thi
    Sugarcrm Email Integration
    sharepoint 2010 masterpage中必须的Content PlaceHolder
    微信开放平台
    Plan for caching and performance in SharePoint Server 2013
    使用自定义任务审批字段创建 SharePoint 顺序工作流
    Technical diagrams for SharePoint 2013
    To get TaskID's Integer ID value from the GUID in SharePoint workflow
    how to get sharepoint lookup value
  • 原文地址:https://www.cnblogs.com/jeesezhang/p/4208578.html
Copyright © 2011-2022 走看看