You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:09