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

[讨论/交流] $this->db->where()的子句写法问题

[复制链接]
发表于 2012-11-18 02:12:22 | 显示全部楼层 |阅读模式
本帖最后由 ichou 于 2012-11-18 02:21 编辑

先看手册:http://codeigniter.org.cn/user_guide/database/active_record.html

4.自定义字符串:
你可以手动的编写子句:

PHP复制代码
$where = "name='Joe' AND status='boss' OR status='active'";
 
$this->db->where($where);
复制代码

不知道大家去验证过没,我测试的时候蛋疼的发现它生成的SQL语句居然是:
SQL复制代码
SELECT * FROM (`my_table`) WHERE `name='Joe'` AND STATUS='boss' OR STATUS='active'
复制代码


呃 ,第一个条件居然被视为一个字段名保护起来了 =.=

然后如果在name后加个空格 这样写:
PHP复制代码
$where = "name ='Joe' AND status='boss' OR status='active'";
 
$this->db->where($where);
复制代码


得到的SQL是
SQL复制代码
SELECT * FROM (`my_table`) WHERE `name` ='Joe' AND STATUS='boss' OR STATUS='active'
复制代码


为什么会有这么奇葩的事儿呢?是手册错了还是我犯2了?

求围观 求解释



发表于 2012-11-18 02:32:05 | 显示全部楼层
4.自定义字符串:

下方下方的下方:
$this->db->where() 接受可选的第三个参数。如果你将它设置为 FALSE, CodeIgniter 将不会为你那些包含反勾号的字段名或表名提供保护
 楼主| 发表于 2012-11-18 11:55:54 | 显示全部楼层
是的 我看到了 但是那个分段 看上去真不像是补充说明的说 很容易误解啊

本版积分规则