如何使用 codeigniter 中的事务进行基于数据更改的提交和回滚?
Posted
技术标签:
【中文标题】如何使用 codeigniter 中的事务进行基于数据更改的提交和回滚?【英文标题】:how to use transactions in codeigniter for commit and rollback based on data change? 【发布时间】:2017-06-26 23:38:18 【问题描述】:我想了解如何使用 MYSQL TRANSACTIONS。
我有两个表的用例。假设表 1 和表 2。现在我在 Table1 中插入一些数据,我从该表中得到的 insert id
我想将其插入到表 2 中。
如果值成功插入到 Table1 中,并且在插入 Table2 值期间如果发生任何错误,我也想从 Table1 中删除值,因为对我的 Table2 的查询不成功。
我只是想了解如何使用 Codeigniter 来完成这项工作。 如何根据需要 COMMIT 或 ROLLBACK。
请帮助我理解一些示例代码。
更新
我还参考了 Codeigniter 用户指南。但是我没看懂Running Transactions manually
这个概念是什么意思?如上所述,我想做一些自动的触发器,我的意思是如果我的查询失败,我希望它使用 Codeigniter 回滚它所做的一切。
代码:
$this->db->trans_begin();
$data = $this->Product_m->array_from_post(array('name','description'));
$this->Product_m->save($data,$id);
$pid = $this->db->insert_id();
$num_of_license = $_POST['license'];
$this->Product_m->create_product($pid,$num_of_license);
if ($this->db->trans_status() === FALSE)
$this->db->trans_rollback();
else
$this->db->trans_commit();
现在在这种情况下,我尝试这样做:
这条语句$this->Product_m->create_product($pid,$num_of_license);
根据前面的save()方法插入数据,现在假设create_product()方法发生了一些错误。然后我想回滚。我想删除 save() 方法所做的记录。
【问题讨论】:
Codeigniter Transactions的可能重复 这不是重复,他只是要求提供在 codeigniter 中完成的交易的参考 @dhruvjadia 我已经提到过这个问题,但它专门针对他的代码,我只是想了解如何以不同的方式使用它,我还提到我想“学习”跨度> 【参考方案1】:使用以下步骤。
1.使用$this->db->trans_begin();
开始您的交易。
2.执行查询。
3.使用$this->db->trans_status()
检查交易状态。
4.如果status
为真commit
事务使用$this->db->trans_commit();
。
5.如果status
为假rollback
事务使用$this->db->trans_rollback();
。
$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();
有关更多信息,请参阅文档Codeigniter Transaction
【讨论】:
你能解释一下这个用例场景吗,我插入一条记录并基于该记录插入另一条记录,但是如果发生错误,我想在第二个表中插入第二个记录时,我什至想删除第一个我插入的记录 将 $this->db->trans_rollback();删除本次交易的所有记录? 是的 ..在trans_begin
之后执行的所有查询都将被回滚。你有没有按照上面的步骤尝试过。
可以请检查我尝试过使用此更新的问题,但是当我的第二个查询失败时,它不会回滚保存方法的查询!我该怎么做
是的,我试过了,但是回滚不起作用,假设我的第二种方法有一个 db 错误,所以我想回滚,我想删除插入的 save() 方法以上是关于如何使用 codeigniter 中的事务进行基于数据更改的提交和回滚?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?