Codeigniter trans_start()不回滚所有查询

时间:2014-05-22 07:40:04

标签: mysql codeigniter activerecord commit rollback

我在trans_start()和trans_complete()之间运行了3个插入查询。它们运行得非常好......唯一的问题是,当我在完成之前运行回滚它只回滚插入查询1和3.这些是回滚的唯一查询,即使我试图改变它的位置而没有成功。请让我知道我做错了什么?我尝试通过$ this-> db-> query(...)编写查询,而不是使用活动记录,但它给出相同的结果......

我有以下代码。

            $this->db->trans_start();

            //insert transaction

                $i_data = array(
                      'user_id'     => $app['opp_id']
                    , 'amount'      => $app['total']
                    , 'type'        => 1
                    , 'feb_bal'     => 1
                    , 'note'        => 'Earnings' 
                );

                $this->db->insert('transaction', $i_data);
                $tran_id = $this->db->insert_id();

            //insert 2
                $c_data = array(
                      'oppt_opp_id' => $app['id']
                    , 'status'      => 0 //closed
                );
                $this->db->insert('progress', $c_data);


            //insert 3 

                $e_data = array(
                      'tran_id' => $tran_id
                    , 'app_id'  => $app['id']
                    , 'type'    => 1
                    , 'status'  => 2
                );
                $this->db->insert('earn_spend', $e_data);


             $this->db->trans_rollback();

            $this->db->trans_complete();

1 个答案:

答案 0 :(得分:4)

  

CodeIgniter的数据库抽象允许您使用事务   支持事务安全表类型的数据库。在MySQL中,你是   需要运行InnoDB或BDB表类型而不是更多   常见的MyISAM。

文档: http://ellislab.com/codeigniter/user-guide/database/transactions.html

您可以尝试使用以下代码吗?我根据CI文件准备了代码

<?php

$this->db->trans_begin();

//insert transaction
$i_data = array(
      'user_id'     => $app['opp_id']
    , 'amount'      => $app['total']
    , 'type'        => 1
    , 'feb_bal'     => 1
    , 'note'        => 'Earnings' 
);

$this->db->insert('transaction', $i_data);
$tran_id = $this->db->insert_id();

//insert 2
$c_data = array(
      'oppt_opp_id' => $app['id']
    , 'status'      => 0 //closed
);
$this->db->insert('progress', $c_data);

//insert 3 
$e_data = array(
      'tran_id' => $tran_id
    , 'app_id'  => $app['id']
    , 'type'    => 1
    , 'status'  => 2
);
$this->db->insert('earn_spend', $e_data);

if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

?>