qi_ruo 发表于 2012-3-9 23:29:26

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

本帖最后由 qi_ruo 于 2012-3-9 23:30 编辑

今天写程序使用$this->db->where()的时候出现了一些问题,代码如下:$title = $this->input->post('title'); // false
$query = $this->db->where('title', $title)->get('pages');
return $query->result();
当表单数据为空的时候,原以为返回值为空,程序却返回了pages表里的所有记录,使用$this->db->last_query();查看了下生成的查询:
SELECT * FROM (`pages`) WHERE `title` = 0
而不是我们想象中的
SELECT * FROM (`pages`) WHERE `title` = ''
使用$this->db->where('title', strval($title)); 就不会出现问题了。

写查询的时候一定不要忘记使用strval(), intval(), floatval()这 三个函数,以前在书上看过,写程序的时候却想不起来,记下来加深下印象。。

lynn.wang 发表于 2012-3-10 09:15:03

前车之鉴!!!

Hex 发表于 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

这是程序中,接收的值应该先进行过滤的,无论客户端,传递什么参数都必须过滤的

yunnysunny 发表于 2012-3-10 18:22:18

要对输入进行过滤,这种情况肯定属于被过滤掉的情况,楼主还是反思一下,之前的代码有多少漏网之鱼吧。

gaowei 发表于 2012-3-16 20:04:54

WHERE `title` = '',这样也不是好的编码规范,还是建议要做一下判断

justdoit 发表于 2012-3-21 23:02:56

我也遇到过这种问题,这回用心给记下了。

阳光笑脸 发表于 2012-3-24 15:10:45

严格过滤post就不会有这个问题了
页: [1]
查看完整版本: $this->db->where()要注意的问题