MySQL时间范围查询在phpMyAdmin可用,CodeIgniter中失效
解决CodeIgniter中MySQL时间范围查询失效的问题
这种情况我之前排查过好多次,大概率是CodeIgniter查询构造器的用法细节没处理对,咱们一步步来定位问题:
1. 先补全并修正你的CI查询代码
你给出的代码片段没写完,推测是WHERE条件的写法出了问题。对应你在phpMyAdmin里能用的原生SQL,正确的CI写法有两种:
方法一:使用CI内置的where_between(推荐,CI3及以上版本支持)
$this->db->select('*'); $this->db->from('pozvani_brojevi'); // 直接传入字段名、起始时间、结束时间 $this->db->where_between('vrijeme_poziva', '2018-04-05 00:00:00', '2018-04-26 00:00:00'); $this->db->order_by('vrijeme_poziva', 'DESC'); $query = $this->db->get();
方法二:手动写BETWEEN条件(适合所有CI版本)
如果你的CI版本较低没有where_between,可以手动拼接,但要关闭自动转义避免语法错误:
$this->db->select('*'); $this->db->from('pozvani_brojevi'); // 第三个参数FALSE表示CI不自动给语句加引号/反引号 $this->db->where('vrijeme_poziva BETWEEN "2018-04-05 00:00:00" AND "2018-04-26 00:00:00"', NULL, FALSE); $this->db->order_by('vrijeme_poziva', 'DESC'); $query = $this->db->get();
2. 关键排查步骤:对比CI生成的SQL
不管用哪种写法,都要输出CI最终生成的SQL语句,和你在phpMyAdmin里能用的语句对比:
// 执行查询后输出生成的SQL echo $this->db->last_query();
如果生成的SQL和你手动写的不一样,比如字段名被错误转义、时间格式不对,那就是问题所在。
3. 其他可能的坑
- 日期格式匹配:确保传入的时间字符串格式(
YYYY-MM-DD HH:MM:SS)和数据库中vrijeme_poziva字段的类型(比如DATETIME)完全匹配,格式不对会导致查询无结果。 - 动态参数检查:如果时间是从表单/变量传入的,要确认参数没有被过滤或者格式被篡改。
- 开启调试模式:在
application/config/database.php中把$db['default']['db_debug']设为TRUE,这样如果有SQL语法错误会直接显示,方便快速定位。
内容的提问来源于stack exchange,提问作者Damodar
相关产品推荐
相关产品推荐

