数据库事务在控制器 codeigniter 中不起作用

Posted

技术标签:

【中文标题】数据库事务在控制器 codeigniter 中不起作用【英文标题】:Database transaction not working in controller codeigniter 【发布时间】:2014-10-10 23:20:57 【问题描述】:

我在控制器中调用多个模型,所有模型都进行数据库查询。 我做了这样的事情

public function InsertSale()
    
            $this->db->trans_start(TRUE);
            // all logic part and models calling which do insert/update/delete

            $this->db->trans_complete();

即使在某些查询后出现故障,上述代码也无法正常工作。

【问题讨论】:

为什么你还要在任何你想称之为“控制器”的东西中使用数据库事务?! 相关ellislab.com/forums/viewthread/101648 删除TRUE 尝试使用$this->db->trans_start(); 默认为true。我正在使用像你这样的事务并且工作正常。所以它也应该适合你。 @tereško 对于涉及多个模型的更改,例如。 @Sebastianb 你所说的“模特”是什么意思? 【参考方案1】:

$this->db->trans_start(true); 中包含true 会将事务置于测试模式,这意味着无论发生什么,查询都将回滚。

如果您想查看查询是否有效,您可以使用:

$this->db->trans_status();

根据结果返回true/false

【讨论】:

【参考方案2】:

所以你必须像这样跟随

$this->db->trans_start(); # Starting Transaction
$this->db->trans_strict(FALSE); 

$this->db->insert('table_name', $someDataArray); # Inserting data

# Updating data
$this->db->where('id', $id);
$this->db->update('table_name', $someDataArray); 

$this->db->trans_complete();

这很好。 Check this answer too

【讨论】:

以上是关于数据库事务在控制器 codeigniter 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ng-click 在 ajax 数据表 + codeigniter 中不起作用

登录验证在CodeIgniter中不起作用

动态自定义过滤器在 codeigniter 中不起作用

Codeigniter 控制器链接在 IIS 中不起作用

Braintree paypal 在 codeigniter 中不起作用

CodeIgniter 会话类在 Chrome 中不起作用