$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()这 三个函数,以前在书上看过,写程序的时候却想不起来,记下来加深下印象。。
前车之鉴!!! 你这个和 $this->input->post() 有关,和数据库类无关,你只要在 post() 中传递第二个参数为空字符串即可,如 $this->input->post('title', ''); 用where,真正要注意的是=''与is null的不同。
不处理好$this->input->post(),却去怪罪where,高手高手! 这是程序中,接收的值应该先进行过滤的,无论客户端,传递什么参数都必须过滤的 要对输入进行过滤,这种情况肯定属于被过滤掉的情况,楼主还是反思一下,之前的代码有多少漏网之鱼吧。 WHERE `title` = '',这样也不是好的编码规范,还是建议要做一下判断 我也遇到过这种问题,这回用心给记下了。 严格过滤post就不会有这个问题了
页:
[1]