4

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()or之后trans_off())。

我究竟做错了什么 ?请帮我。

I am using mySql as underlying database.
4

2 回答 2

1

我认为你需要在交易开始之前添加这个:

$this->db->trans_strict(FALSE);

默认情况下,CodeIgniter 以严格模式运行所有事务。

启用严格模式后,如果您正在运行多组事务,如果一组失败,所有组都将回滚。

于 2014-10-10T06:29:06.807 回答
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();    
}
于 2013-02-12T06:14:04.297 回答