我在代码点火器中的事务有问题。我想知道在这种情况下如何正确使用事务:
foreach (items) {
$this->db->trans_begin();
addItemToArrayTotal_1();
$items = getItem();
if (items == null) {
addItemToArrayTotal_2();
if (!updateTask_1()) {
addItemToArrayTotal_3();
}
continue;
}
if (updateTask_2()) {
addItemToArrayTotal_4();
if (!updateTask_3()) {
addItemToArrayTotal_5();
}
if (updateTask_4()) {
addItemToArrayTotal_6();
}
}
addItemToArrayTotal_7();
}
-addItemToArrayTotal _?()只是将函数与数组而不是数据进行集成。 -updateTask _?()正在与数据进行交互。
我要一一处理,如果发生错误,将回滚。请为我建议如何回滚数据?
答案 0 :(得分:1)
事务的固有特性是,如果一个数据库查询失败,它们将自动回滚。
示例:
$this->db->trans_start();
$this->db->insert(...);
$this->db->update(...);
$this->db->delete(...);
$this->db->trans_complete();
return $this->db->trans_status();
如果删除查询失败,则更新和插入查询将被回滚。
在CodeIgniter中,您不需要任何逻辑来保证*,只需在启动希望进行事务处理的查询块之前使用trans_start()
,然后在使用trans_complete()
之前即可。
*(除非您手动进行交易:https://www.codeigniter.com/user_guide/database/transactions.html#running-transactions-manually)
为确保采用这种方法,请不要禁用trans_strict
。 https://www.codeigniter.com/user_guide/database/transactions.html#strict-mode
TL; DR遵循此示例https://www.codeigniter.com/user_guide/database/transactions.html#managing-errors,您会没事的