【问题标题】:Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1525 Incorrect DATE value: '''致命错误:未捕获异常 \'PDOException\',消息为 \'SQLSTATE[HY000]:一般错误:1525 不正确的 DATE 值:\'\'\'
【发布时间】:2023-01-12 22:05:29
【问题描述】:

我收到错误 SQL Error [1525] [HY000]: Incorrect DATE value: '' 当运行以下查询时:

SELECT * FROM cad_grade_horario WHERE 1=1 AND cg_data = '' AND cg_agenda_status IN ('0', '1') ORDER BY cg_data ASC

我的 MySQL 5.0 机器上的查询有效

但是服务器版本 8.0.20 不起作用

哪些数据库配置更改会导致这种情况?

public function lstCad(){
        $query_gradeHorario = "SELECT * FROM cad_grade_horario WHERE 1=1 ".$this->filterRows." ORDER BY cg_data ASC ".$this->limitRows." "; 
        $myRes = $this->myConn->prepare($query_gradeHorario); 
        $myRes->execute(); 
        $myVal = $myRes->fetchAll(PDO::FETCH_BOTH); 
        $this->totRows = count($myVal); 
        if ($this->totRows>0){ 
            $this->erro = false; 
            return $myVal; 
        } else { 
            $this->erro = true; 
            return "<font color=red><b>Erro:</b> Nenhum registro encontrado.</font>"; 
        } 
        $myVal = NULL; 
        $myRes = NULL; 
    } 

【问题讨论】:

  • 您可以共享表架构和样本输入数据吗?
  • 如果cg_data 是日期字段,则它不能为空字符串。如果该字段可为空,请改为检查 IS NULL
  • 如果我在 php 代码中注释掉这一行 $objLst = new gradeTime(); $objLst->filterRows = " AND cg_data = '{$_POST['cp_data']}' ";有用。
  • 请在您的问题中添加额外信息,而不是像这样在评论中添加。
  • 我认为 aynber 意味着你需要做:... AND cg_data IS NULL AND ...

标签: mysql


【解决方案1】:

在 MySQL 5.0 版本中,列可能被定义为字符串,或者服务器的 SQL 模式包括选项NO_ZERO_IN_DATE,它允许使用空字符串或 '0000-00-00' 作为有效日期值。但是在MySQL 8.0版本中,默认的SQL模式不再包含这个选项,空字符串值不再被认为是有效日期。

您可以通过运行以下查询在 SQL 模式下启用选项 NO_ZERO_IN_DATE:

SET @@SESSION.sql_mode = 'NO_ZERO_IN_DATE,NO_ZERO_DATE';

您还可以使用以下查询来检查当前的 SQL 模式:

SELECT @@global.sql_mode;

请务必注意,更改 SQL 模式可能会影响应用程序中的其他查询和脚本,因此建议彻底测试更改

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2015-11-18
    • 1970-01-01
    相关资源
    最近更新 更多