Codeigniter活动记录更新无法正常工作,但可用于添加虚拟语句

时间:2014-02-02 15:48:05

标签: database codeigniter activerecord

codeigniter代码序列表现得相当奇怪。 在模型中,下面的代码不起作用,不更新数据库:

$this->db->set($data);
$this->db->where($this->_primaryKey, $id);
$this->db->update($this->_tableName);

如果我在它们之前添加一个伪指令并使序列看起来如下所示

$this->db->update('pages', array('body'=>'hhfhj@gmail.com'), "id = 7"); 
//The above statement need not to have any connection with the table I am updating.
// But unless I add the above statement, the statement below are not able to update the database.

$this->db->set($data);
$this->db->where($this->_primaryKey, $id);
$this->db->update($this->_tableName);

我不明白,那个额外的声明会使codeigniter主动记录功能开始起作用而不是其他。

在第一种情况下生成的查询是:

"UPDATE `users` SET `name` = 'Shashank Jagetiya', `email` = 'other@gmail.com', `password` = 'a' WHERE `id` != '2' AND `id` = 2" 

在第二种情况下生成的查询是:

"UPDATE `users` SET `name` = 'Shashank Jagetiya', `email` = 'adfddfaf@gmail.com', `password` = 'a' WHERE `id` = 2" 

好的,我明白以前的某些情况仍然存在......或者我看不到,来自哪里或如何删除

1 个答案:

答案 0 :(得分:3)

我怀疑你的问题在这里:

WHERE `id` != '2' 

虽然将2转换为数字类型,但隐式转换会将其转换为浮点数,我敢打赌,该列的数据类型为int。

请参阅casting上的此条目。我建议在这种情况下不要使用'2',因为它可能产生意想不到的结果,如上所述。

此外,此声明

`id` != '2' AND `id` = 2" 

即使您没有投射,也总是会解决错误。

`id` != 2 AND `id` = 2