【发布时间】:2013-02-19 21:57:00
【问题描述】:
我正在使用 Codeigniter 事务
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();
这很好用,我遇到的问题是在trans_start 和trans_complete 内部我正在调用其他函数,这些函数处理数据库,因此它们包含插入和更新以及一些删除......例如:
$this->db->trans_start();
$this->utils->insert_function($data);
$this->utils->update_function2($test);
$this->db->trans_complete();
现在,如果这些函数被执行并且发生一些错误,CodeIgniter 将不会进行回滚。
处理此类问题的最佳方法是什么?
我想到的唯一解决方案是从这些函数中返回一个错误,并在这些函数中添加(trans_stat 和 trans_complete)如果它返回错误,请执行 $this->db->trans_rollback
例如:
$this->db->trans_start();
$result = $this->utils->insert_function($data);
if($result === false){
$this->db->trans_rollback();
}
$this->db->trans_complete();
有更好的方法吗?
更新 1:
根据要求提供我正在调用的外部函数的示例:
// insert_function contains
$rec = array(
'numero' => $numero,
'transaction_id' => $id,
'debit' => $product_taxes['amount_without_taxes'],
'date' => $data['date_transaction'],
);
$this->addExerciceAccountingRecords($rec);
and addExerciceAccountingRecords contains
function addExerciceAccountingRecords($records) {
$this->db->insert('transactions_exercices', $records);
}
【问题讨论】:
-
您的 MySQL 表使用什么存储引擎?还有,你怎么知道回滚失败了?
-
@MarcAudet INNODB ,我知道是因为当在 trans_start 内的函数调用期间修改的表上没有应用回滚时
-
您可以将代码发布到 utils->insert_function 和 utils->insert_function2 吗?我知道问题可能是什么......
-
@MarcAudet 我已经更新了我的问题。
-
还有一个问题:utils 是否在libraries 文件夹中?
标签: php mysql codeigniter transactions codeigniter-3