nase 发表于 2009-7-29 11:28:23

Active Record 类的语句顺序问题

我们平时写SQL语句的时候,where语句往往写在整个sql语句的后面,例如:



update mytable
set name = 'test'
where id = 1


如果在Active Record 类中也这样思考就麻烦了。


$data = array(
               'name' => $name
            );
$this->db->update('mytable', $data);

$this->db->where('id', $id);

以上代码中的update根本不考虑where而直接执行整个表的修改。


正确的写法应该是:


$data = array(
               'name' => $name
            );
$this->db->where('id', $id);
$this->db->update('mytable', $data);



我建议在Active Record 类的“用户指南”中应该特意提醒一下顺序的问题才对。

幽蓝冰魄 发表于 2010-8-9 14:58:16

看到这个我想下次ci加上一个update_where()的ar。

乌有 发表于 2010-8-10 09:52:50

还没有因为这个顺序出问题.
直觉$this->db->update('mytable', $data)方法后
就是最终的结束操作了..在此之后的语句肯定无效..
其它方法类似,比如$this->db->get..
肯定是在条件语句写完之后..

xiaoque1989 发表于 2010-8-11 13:41:27

知道程序运行逻辑的人 应该都不会弄错楼主想多了

wangming0 发表于 2012-4-26 18:55:50

强烈同意!
我现在刚开始学CI,用链式语句时下意识的就模仿手册中$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);的顺序写update语句,因为这也符合SQL的语法习惯
差点铸成大错。。。

暗夜星辰 发表于 2012-4-28 11:03:03

mysql 是 mysqlCI 是 CI 每个系统都应遵循自己的原则
页: [1]
查看完整版本: Active Record 类的语句顺序问题