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

$this->db->where()要注意的问题

[复制链接]
发表于 2012-3-9 23:29:26 | 显示全部楼层 |阅读模式
本帖最后由 qi_ruo 于 2012-3-9 23:30 编辑

今天写程序使用$this->db->where()的时候出现了一些问题,代码如下:
PHP复制代码
$title = $this->input->post('title'); // false
$query = $this->db->where('title', $title)->get('pages');
return $query->result();
复制代码

当表单数据为空的时候,原以为返回值为空,程序却返回了pages表里的所有记录,使用$this->db->last_query();查看了下生成的查询:
  1. SELECT * FROM (`pages`) WHERE `title` = 0
复制代码

而不是我们想象中的
  1. SELECT * FROM (`pages`) WHERE `title` = ''
复制代码

使用$this->db->where('title', strval($title)); 就不会出现问题了。

写查询的时候一定不要忘记使用strval(), intval(), floatval()这 三个函数,以前在书上看过,写程序的时候却想不起来,记下来加深下印象。。
发表于 2012-3-10 09:15:03 | 显示全部楼层
前车之鉴!!!
发表于 2012-3-10 10:47:57 | 显示全部楼层
你这个和 $this->input->post() 有关,和数据库类无关,你只要在 post() 中传递第二个参数为空字符串即可,如 $this->input->post('title', '');
发表于 2012-3-10 12:16:19 | 显示全部楼层
用where,真正要注意的是=''与is null的不同。

不处理好$this->input->post(),却去怪罪where,高手高手!
发表于 2012-3-10 13:26:27 | 显示全部楼层
这是程序中,接收的值应该先进行过滤的,无论客户端,传递什么参数都必须过滤的
发表于 2012-3-10 18:22:18 | 显示全部楼层
要对输入进行过滤,这种情况肯定属于被过滤掉的情况,楼主还是反思一下,之前的代码有多少漏网之鱼吧。
发表于 2012-3-16 20:04:54 | 显示全部楼层
WHERE `title` = '',这样也不是好的编码规范,还是建议要做一下判断
发表于 2012-3-21 23:02:56 | 显示全部楼层
我也遇到过这种问题,这回用心给记下了。
发表于 2012-3-24 15:10:45 | 显示全部楼层
严格过滤post就不会有这个问题了

本版积分规则