You need to enable JavaScript to run this app. CodeIgniter如何正确查询筛选字段值为null?多种写法无效
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter如何正确查询筛选字段值为null?多种写法无效

CodeIgniter 筛选字段值为 NULL 的实现方案

错误写法失效原因

你之前尝试的三种写法都无法生效,核心原因和CodeIgniter查询构造器的默认转义规则、SQL本身的NULL判断语法有关:

  • 直接传整段条件字符串:$this->db->where('uu.usuario_grupo_id is null');
    查询构造器默认会对where入参做自动转义,这段带逻辑判断的字符串会被识别为字段名,自动包裹反引号,最终生成的SQL语法完全错误。
  • 传入null作为判断值:$this->db->where('uu.usuario_grupo_id =', null);
    首先SQL语法不支持用=匹配NULL值,必须使用IS NULL;其次查询构造器默认会将传入的null参数转义为空字符串,最终生成uu.usuario_grupo_id = ''的条件,只能匹配空字符串,无法匹配真实的NULL字段。
  • 传入字符串形式的null:$this->db->where('uu.usuario_grupo_id =', 'null');
    该写法会把字符串null当作普通值转义,最终生成uu.usuario_grupo_id = 'null'的条件,只能匹配字段值为"null"字符串的记录,和SQL的NULL值完全无关。

正确实现方式

  • 优先使用内置NULL判断方法(CI 3.0+ / 全版本CI 4支持)
    查询构造器已经提供了专门的NULL判断方法,无需手动处理转义逻辑:
    // 筛选字段为NULL的记录
    $this->db->where_null('uu.usuario_grupo_id');
    // 如需筛选非NULL记录,调用where_not_null即可
    $this->db->where_not_null('uu.usuario_grupo_id');
    
  • 低版本CI兼容写法
    如果使用的CI版本没有内置where_null方法,可以通过关闭条件自动转义的方式实现,将where方法的第三个参数设为FALSE即可跳过自动转义:
    $this->db->where('uu.usuario_grupo_id IS NULL', NULL, FALSE);
    

安全提示:关闭自动转义的写法仅适用于条件完全可控的场景,不要将用户输入的内容直接拼接进原生条件,避免SQL注入风险。

内容的提问来源于stack exchange,提问作者Raiuri Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 19:36:04