同一查询在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
相关产品推荐
相关产品推荐

