phpMyAdmin执行UPDATE语句报#1292:日期值异常问题求助
问题排查:MySQL更新日期时出现错误#1292
问题描述
- 操作场景:使用phpMyAdmin更新数据表
mantenimiento的值 - 执行的SQL语句:
UPDATE mantenimiento SET fecha_inicio = 2022-07-13, fecha_final = 2022-07-15, id_usuario = 4, id_equipo=3, descripcion = 'Falla' WHERE id = 2;
- 报错信息:
#1292 - Incorrect date value: '2002' for column 'fecha_inicio' at row 1
- 关联PHP预处理代码:
$stmt = $conn->prepare("UPDATE mantenimiento SET fecha_inicio = :fecha_inicio, fecha_final = :fecha_final, id_usuario = :id_usuario, id_equipo=:id_equipo, descripcion = :descripcion WHERE id = :id"); $stmt->bindParam(':fecha_inicio', $this->fecha_inicio); $stmt->bindParam(':fecha_final', $this->fecha_final); $stmt->bindParam(':id_usuario', $this->id_usuario); $stmt->bindParam(':id_equipo', $this->id_equipo); $stmt->bindParam(':descripcion', $this->descripcion); $stmt->bindParam(':id', $this->id);
问题原因
MySQL会把未加引号的2022-07-13当成数学运算:2022减去7再减去13,结果正好是2002。而fecha_inicio是日期类型字段,无法接受数值2002,因此触发#1292错误。
解决方法
1. 直接执行SQL时的修正
给日期值加上单引号,让MySQL识别为日期字符串:
UPDATE mantenimiento SET fecha_inicio = '2022-07-13', fecha_final = '2022-07-15', id_usuario = 4, id_equipo=3, descripcion = 'Falla' WHERE id = 2;
2. PHP代码的注意事项
你的PHP预处理代码本身逻辑没问题,但需要确保$this->fecha_inicio和$this->fecha_final是符合MySQL日期格式的字符串(比如2022-07-13),预处理机制会自动处理类型转换。同时要确认这两个变量没有被错误处理成数值类型。
内容的提问来源于stack exchange,提问作者DUILIO JOSE SOTELO MEDRANO
相关产品推荐
相关产品推荐

