Codeigniter中使用变量时Where子句失效问题求助
解决CodeIgniter中WHERE子句变量被识别为字符串的问题
我来帮你搞定这个问题~ 你遇到的情况是因为从表单(比如POST)获取的$price_max默认是字符串类型,CodeIgniter的Query Builder会根据变量的PHP类型自动决定是否加单引号,所以字符串类型的值会被包裹在单引号里,而直接传数字的话是整数类型,就不会加引号。
解决方法很简单,只需要把变量强制转换为整数类型就行,下面给你几种具体的实现方式:
方法1:提前转换变量类型
在获取变量的时候就把它转成整数,这样后续用在WHERE子句里的时候就是整数类型了:
function filter() { $state = $this->input->post('state'); // 把POST获取的字符串转成整数,两种方式都可以 $price_max = (int)$this->input->post('price_max'); // 或者用intval()函数 // $price_max = intval($this->input->post('price_max')); $this->db->where('prize <', $price_max); // 你的其他查询逻辑... }
方法2:在WHERE子句中直接转换
如果不想提前处理变量,也可以在调用where方法的时候直接对变量做类型转换:
$this->db->where('prize <', (int)$price_max);
方法3:带校验的安全处理(推荐)
如果$price_max可能为空或者非数字,最好先做合法性校验,避免无效的查询条件:
function filter() { $state = $this->input->post('state'); $price_max = $this->input->post('price_max'); // 先判断是否为数字,再转换类型并添加条件 if (is_numeric($price_max)) { $price_max = (int)$price_max; $this->db->where('prize <', $price_max); } // 后续查询逻辑... }
这样处理之后,Query Builder生成的SQL语句里prize <后面的值就会是整数类型,不会带单引号啦~
内容的提问来源于stack exchange,提问作者sabithkumar
相关产品推荐
相关产品推荐

