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

Codeigniter数据库子串查询失败求助:检查ipv6字段指定2个字符

解决CodeIgniter中使用SUBSTR筛选数据库记录的问题

嘿,我看你在CodeIgniter里用substr()函数筛选ipv6字段的子串时遇到了问题——这是因为CodeIgniter的默认where()方法会把第一个参数当作数据库字段名处理,而不是直接执行SQL函数。咱们来调整下代码就能解决啦:

方法一:关闭字段转义

可以给where()方法传递第二个参数FALSE,让CodeIgniter不对条件表达式进行转义,这样SQL里的substr()就能正常执行:

function getby_substr() {
    $query = $this->db
        ->where('substr(ipv6, 4, 2) = "c1"', FALSE)
        ->get('computer_information');
    
    if ($query->num_rows() > 0) {
        return $query->result();
    }
    return array();
}

方法二:使用原生条件查询(更安全)

如果你的CodeIgniter版本是3.0及以上,推荐用where_raw()方法,它支持参数绑定,能避免SQL注入风险:

function getby_substr() {
    $query = $this->db
        ->where_raw('substr(ipv6, 4, 2) = ?', ['c1'])
        ->get('computer_information');
    
    if ($query->num_rows() > 0) {
        return $query->result();
    }
    return array();
}

小提醒

注意不同数据库的substr函数参数规则:比如MySQL的SUBSTR(str, pos, len)是从1开始计数的位置pos截取长度为len的字符,确认你写的4(第4个字符开始)和2(截取2个字符)符合你的需求哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:44:11