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

同一查询在PHP、phpMyAdmin及MySQL命令行返回不同结果求助

问题:Codeigniter查询返回的end_date与MySQL工具结果不一致

问题场景

执行的SQL语句:

SELECT *
FROM `rbs`
WHERE `rbs_id` = '92448'
  • PHP(Codeigniter 3.1.11)脚本输出结果:
[rbs_id] => 92448
[rbs_status] => 4
[start_date] => 2022-07-22 13:58:36
[end_date] => 2022-07-22 15:12:24
  • phpMyAdmin和MySQL命令行执行同一语句的结果:
[rbs_id] => 92448
[rbs_status] => 4
[start_date] => 2022-07-22 13:58:36
[end_date] => 2022-12-31 23:59:59

关键异常:PHP脚本返回的end_date会随页面刷新更新,已确认三者执行的查询语句完全一致,使用同一数据库,重启MySQL后问题仍存在。

可能的排查方向

  • 查询缓存问题:检查Codeigniter是否开启了查询缓存,临时关闭缓存($this->db->cache_off();)后重新测试,看结果是否一致。
  • 时区不匹配:对比PHP脚本的MySQL连接时区与phpMyAdmin/命令行的时区。查看Codeigniter数据库配置文件(application/config/database.php)中的时区设置,以及PHP的date.timezone配置,时区差异可能导致日期字段被自动转换。
  • 模型结果处理逻辑:检查对应模型是否存在after_find钩子或自定义结果处理代码,是否在查询后修改了end_date的值,包括全局模型扩展的逻辑。
  • 数据库驱动差异:尝试切换Codeigniter使用的MySQL驱动(如从mysqli切换到pdo),不同驱动对日期字段的解析方式可能存在差异。
  • 数据库触发器:排查数据表是否存在隐式触发的逻辑,虽然MySQL没有AFTER SELECT触发器,但可以检查是否有其他关联触发器或存储过程被调用。
  • 全局日期处理干扰:检查是否有全局函数或框架扩展,自动对查询结果中的日期字段进行格式化或替换操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:06:55