Codeigniter - 交易测试模式不起作用

时间:2011-09-15 22:20:04

标签: php codeigniter activerecord transactions

那么我做错了什么?当我运行以下代码时,即使事务处于测试模式,数据库也会始终更新。

/**
 * update_batch
 * This updates multiple rows. The data array must include the game_id and game_type_prize_id
 * @param array
 * @return bool
 * @author zechdc
 */
function update_batch($data)
{
    $result = TRUE;

    foreach($data as $prize)
    {
        $this->db->trans_start(TRUE); //first param is set to TRUE for test mode.
        $this->db->where('game_id', $prize['game_id']);
        $this->db->where('game_type_prize_id', $prize['game_type_prize_id']);
        $this->db->update('game_prizes', $prize);
        $this->db->trans_complete();

        if($this->db->affected_rows() == -1)
        {
            $result = FALSE;
        }
    }


    return $result;
}

2 个答案:

答案 0 :(得分:6)

AbhishekDilliwal在评论中向我们提供了答案。如果他发布答案,我会删除我并接受他,所以他得到了信用而不是我。


答案:

Codeigniter交易测试模式目前不起作用。


解决方案:

替换:

$this->_trans_failure = ($test_mode === TRUE) ? TRUE : FALSE;

使用:

$this->_trans_status = ($test_mode === TRUE) ? FALSE : $this->_trans_status;

在以下codeigniter系统文件中:

system/database/drivers/mysql/mysql_driver.php
system/database/drivers/mysqli/mysqli_driver.php
system/database/drivers/oci8/oci8_driver.php
system/database/drivers/odbc/odbc_driver.php
system/database/drivers/postgre/postgre_driver.php
system/database/drivers/sqlite/sqlite_driver.php

看起来rommelxcastro已经将the fix提交给了github repo。现在我们只需等待Codeigniter拉出它并发布一个新版本:)


来源:

答案 1 :(得分:0)

您是否尝试在纯SQL中编写查询,而不是使用where()和update()等库函数?我不确定这一点,但CI文档只在文档中显示query()函数。

http://codeigniter.com/user_guide/database/transactions.html