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

CodeIgniter数值区间数据查询问题:自定义查询返回空结果

解决CodeIgniter中范围查询无结果的问题

你写的查询条件有两处关键问题,导致没查到数据,咱们一步步来修正:

1. 错误的WHERE条件写法

你当前的写法:

$this->db->where('Bond#' >= $data['from']);

PHP会先计算'Bond#' >= $data['from']这个表达式,得到一个布尔值(true/false),再把这个布尔值传给where()方法,这完全不是你想要的SQL查询条件。

2. 特殊字段名的处理

你的字段名是Bond#,其中#在SQL里属于注释符号,直接写会导致数据库解析字段名出错,必须用反引号(MySQL环境下)包裹起来。

正确的写法有三种,选你顺手的就行:

方法一:拆分条件,用参数绑定(推荐,防SQL注入)

$this->db->select('*');
$this->db->from('draw');
// 用反引号包裹特殊字段名,把条件和参数分开传递
$this->db->where('`Bond#` >=', $data['from']);
$this->db->where('`Bond#` <=', $data['to']);
return $this->db->get();

CodeIgniter会自动帮你转义参数,避免SQL注入风险。

方法二:使用where_between简化范围查询

如果你的需求是查询Bond#在from和to之间的所有数据,用where_between会更简洁:

$this->db->select('*');
$this->db->from('draw');
$this->db->where_between('`Bond#`', $data['from'], $data['to']);
return $this->db->get();

这个方法会自动生成WHERE Bond# BETWEEN '值1' AND '值2'的SQL语句,和>=、<=的效果完全一致。

方法三:直接写完整SQL条件(记得手动转义)

如果你习惯写完整的条件字符串,一定要用$this->db->escape()转义参数,防止注入:

$this->db->select('*');
$this->db->from('draw');
$this->db->where('`Bond#` >= ' . $this->db->escape($data['from']));
$this->db->where('`Bond#` <= ' . $this->db->escape($data['to']));
return $this->db->get();

额外检查项

  • 确认$data['from']和$data['to']有有效的数值,不是空值或者不符合字段类型的字符串
  • 核对数据库里draw表的Bond#字段,确实存在>= $data['from']且<= $data['to']的数据
  • 如果你的数据库不是MySQL(比如SQL Server),把反引号换成方括号[Bond#]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:10