用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3531|回复: 5
收起左侧

[讨论/交流] Active Record 类的语句顺序问题

[复制链接]
发表于 2009-7-29 11:28:23 | 显示全部楼层 |阅读模式
我们平时写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 类的“用户指南”中应该特意提醒一下顺序的问题才对。

评分

参与人数 1威望 +5 收起 理由
Hex + 5 我很赞同

查看全部评分

发表于 2010-8-9 14:58:16 | 显示全部楼层
看到这个我想下次ci加上一个update_where()的ar。
发表于 2010-8-10 09:52:50 | 显示全部楼层
还没有因为这个顺序出问题.
直觉$this->db->update('mytable', $data)方法后
就是最终的结束操作了..在此之后的语句肯定无效..
其它方法类似,比如$this->db->get..
肯定是在条件语句写完之后..
发表于 2010-8-11 13:41:27 | 显示全部楼层
知道程序运行逻辑的人 应该都不会弄错  楼主想多了
发表于 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 是 mysql  CI 是 CI 每个系统都应遵循自己的原则  

本版积分规则