那么我做错了什么?当我运行以下代码时,即使事务处于测试模式,数据库也会始终更新。
/**
* 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;
}
答案 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