新手求助
请问:$this->db->where();
函数有四种方法来设置 WHERE 子句,其中:
4.自定义字符串:
手动的编写子句:
$where = "name='Joe' AND status='boss' OR status='active'";
$this->db->where($where);
但是在使用第四种方法时总会出现错误,报错时查看错误提示如下
SELECT `id` FROM (`fa_user`) WHERE `role='admin'` OR role='superadmin'
貌似引号的地方有错误,改成其他方法不会出现错误,求教!
注:下的最新版本。 字段名称后至少留一个空格应该就可以了吧
$where = "name = 'Joe' AND status = 'boss' OR status = 'active'"; 回复 2# qi_ruo
正解,多谢。请问是何缘故?php也是刚接触,是sql语句要求有空格还是ci的原因? 本帖最后由 qi_ruo 于 2010-10-12 17:25 编辑
一般在sql语句中的表名和字段名上需要加上反引号(`)防止因为字段出现关键字而发生错误,
默认情况下$this->db->where() 会给表名和字段名自动加上反引号
codeIgniter中可以通过$this->db->last_query();查看最后一次查询语句
关于$this->db->where()函数的四种用法;
1 简单的 key/value 方法:
codeIgniter中$this->db->where()默认是给字段加上反引号的
比如$this->db->where('name','Joe')将生成 WHERE `name` = 'Joe'
2 自定义 key/value 方法:
codeIgniter是通过找key的第一个空格来找出字段名的,并给字段名加上反引号
所以 $this->db->where('name!=','Joe');这样写会变成 `name!=` 'Joe'引发错误
正确的写法应该是 $this->db->where('name !=','Joe');
3 关联数组方法:
也可以包含运算符,但同样需要在各个字段名后留下至少一个空格
4 自定义字符串:
这个貌似有点问题,codeIgniter依然是找第一个空格,然后把空格前的看成字段名,所以
$this->db->where("name = 'Joe' AND age = '23'");
转换为`name` = 'Joe' AND age = '23',
age字段名并没有加上反引号,所以不推荐这种写法,
如果一定要这种写法,可以自己手动加上反引号,比如
$this->db->where("`name` = 'Joe' AND `age` = '23'",NULL,FALSE);
第3个参数为FLASE时,系统不会为字段自动加反引号,这个时候字段名后的空格就不是必需的了,
所以你也可以$this->db->where("`name`='Joe' AND `age`='23'",NULL,FALSE);
但最好还是留个空格吧,又美观,又不容易引发错误,何乐而不为呢? 回复 4# qi_ruo
多谢赐教!很详细! 连接查询怎么办?
这个东西能有用吗? 回复 4# qi_ruo
如果加上括号也可以解决问题,比如:
$this->db->where("(name='Joe' AND status='boss' OR status='active')");
页:
[1]