交易如何正确?

时间:2019-05-17 02:41:17

标签: codeigniter transactions

我在代码点火器中的事务有问题。我想知道在这种情况下如何正确使用事务:

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 _?()正在与数据进行交互。

我要一一处理,如果发生错误,将回滚。请为我建议如何回滚数据?

1 个答案:

答案 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_stricthttps://www.codeigniter.com/user_guide/database/transactions.html#strict-mode

TL; DR遵循此示例https://www.codeigniter.com/user_guide/database/transactions.html#managing-errors,您会没事的