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

  • 相关阅读:
    HTML 拖放 和 地理定位
    HTML web存储
    HTML 语义元素 和 MathML元素
    Docker Swarm
    Docker Machine
    Docker Compose
    Docker 的网络模式
    数据共享与持久化
    镜像和容器的基本操作
    Docker 简介
  • 原文地址:https://www.cnblogs.com/jeesezhang/p/4208578.html
Copyright © 2011-2022 走看看