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"
好的,我明白以前的某些情况仍然存在......或者我看不到,来自哪里或如何删除
答案 0 :(得分:3)
我怀疑你的问题在这里:
WHERE `id` != '2'
虽然将2转换为数字类型,但隐式转换会将其转换为浮点数,我敢打赌,该列的数据类型为int。
请参阅casting上的此条目。我建议在这种情况下不要使用'2',因为它可能产生意想不到的结果,如上所述。
此外,此声明
`id` != '2' AND `id` = 2"
即使您没有投射,也总是会解决错误。
`id` != 2 AND `id` = 2