使用 CodeIgniter 事务?

Posted

技术标签:

【中文标题】使用 CodeIgniter 事务?【英文标题】:Using CodeIgniter transactions? 【发布时间】:2018-01-13 22:01:27 【问题描述】:

使用有什么区别

$this->db->trans_start();

并使用

$this->db->query('START TRANSACTION');?

其实我想把这个问题应用到其他编程语言上,比如C#BeginTransaction()

您何时明确写出要在查询中开始事务,何时仅从框架或您使用的任何语言调用内置方法?

【问题讨论】:

如果可能,我会使用框架方法。它可能带有特定的错误处理、事件、日志记录等,您会在原始查询中错过这些。在 CI 中,您将错过它首先运行的 SET AUTOCOMMIT=0 查询:github.com/bcit-ci/CodeIgniter/blob/… 【参考方案1】:

问题:使用答案有什么区别:没有。两者都做同样的工作。


说明

如果您需要了解 CI 事务,请阅读 this answer another question。

但仅使用$this->db->query() 无法完整归档事务部分。

我个人推荐这个Read this Documentaion


问题:你什么时候明确写出你想在查询中开始一个事务,什么时候你只是从框架或你使用的任何语言中调用一个内置方法?答案:(基于php/CI)这取决于你做什么样的系统。

说明

例如,如果您有简单的产品添加并且它有许多子表。 (假设 1 个主表和 4 个子表)。因此,一旦其中一个子表抛出错误,数据将保留在上级表中。所以为了防止我们应该在这里使用事务。

假设 Child Table 2 发生错误,并且会发生这种情况(对于插入的数据)。

| Table Name    | Normal Insert     if          |
                    /update     | Transaction   |
|    ------     |     ------    |    ------     |
| Master Table  | Remain        | Roalbacked    |   
| Child Table 1 | Remain        | Roalbacked    |
| Child Table 2 | Error         | Roalbacked    |
| Child Table 3 | Empty         | Nothing to do |
| Child Table 4 | Empty         | Nothing to do |

有用的链接

    Transactions - codeigniter.com My Answer on another question php-mysql transaction - mysqltutorial.org

【讨论】:

很好解释。这应该添加到 CI 文档中。

以上是关于使用 CodeIgniter 事务?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CodeIgniter 事务?

在 PHP / CodeIgniter 中,不止一个事务开始了,而另一个事务没有完成;比如嵌套事务

如何使用 codeigniter 中的事务进行基于数据更改的提交和回滚?

Codeigniter 事务测试失败

Codeigniter,事务中的错误跟踪

如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?