codeIgniter中的事务如何工作?我可以在交易时停止并互相启动吗?
参见我的例子
$this->db->trans_begin();
$a = 'UPDATE ......'; RETURN TRUE
$b = 'INSERT INTO......'; RETURN FALSE
$this->db->trans_rollback(); // I tried $this->db->trans_off();
var_dump( $this->db->trans_status() );
$this->db->trans_begin();
if ( $this->db->trans_status() === FALSE ) {
$this->db->trans_rollback();
} else {
$this->db->trans_commit();
}
我的第一个事务将始终返回FALSE
(即使我需要回滚它),现在我需要关闭该事务并需要启动另一个事务。
问题在于$this->db->trans_status()
,它始终会在第二个交易中返回FALSE
(即使在$this->db->trans_rollback()
或trans_off()
之后)。
I am using mySql as underlying database.
答案 0 :(得分:1)
现在可以手动设置trans_status
$this->db->trans_begin();
$a = 'UPDATE ......'; RETURN TRUE
$b = 'INSERT INTO......'; RETURN FALSE
$this->db->trans_rollback(); //First transaction ends it will return FALSE always(in my case)
$this->db->_trans_status = TRUE; // setting the trans_status manually ,so it will ignore previous attempts
$this->db->trans_begin();
//other operations ..
if ( $this->db->trans_status() === FALSE ) {
$this->db->trans_rollback();
} else {
$this->db->trans_commit();
}
答案 1 :(得分:1)
我认为您需要在交易开始前添加此内容:
$this->db->trans_strict(FALSE);
默认情况下,CodeIgniter以严格模式运行所有事务。
启用严格模式时,如果您正在运行多个组 事务,如果一个组失败,则所有组都将回滚。