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()、常にFALSE2番目のトランザクションで戻ります($this->db->trans_rollback()またはの後でもtrans_off())。

私は何を間違っているのですか?私を助けてください。

I am using mySql as underlying database.
4

2 に答える 2

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 に答える
1

トランザクションを開始する前に、これを追加する必要があると思います。

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

デフォルトでは、CodeIgniterはすべてのトランザクションを厳密モードで実行します。

厳密モードが有効になっている場合、トランザクションの複数のグループを実行していると、1つのグループに障害が発生すると、すべてのグループがロールバックされます。

于 2014-10-10T06:29:06.807 に答える