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
相关产品推荐
相关产品推荐

