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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:43:19