Php 空日期作为1970/01/01进入数据库

Php 空日期作为1970/01/01进入数据库,php,mysql,Php,Mysql,因此,我有一个数据库列来表示日期,但是当用户将此部分留空并更新它保存在数据库中的记录(1970/01/01)时 现在,当我设置columngnull=no和default=none时,这是行不通的 在我的代码中,我检查该值是否为null(这就是strotime()函数失败的原因)。如果为空,我将尝试将要保存的值设置为“” 我是否需要在字段中保存一个空值“”,或者日期类型是否意味着它必须有一个日期格式的值?假设$this->determination\u date在中,$databaseDate

因此,我有一个数据库列来表示日期,但是当用户将此部分留空并更新它保存在数据库中的记录(1970/01/01)时

现在,当我设置columngnull=no和default=none时,这是行不通的

在我的代码中,我检查该值是否为null(这就是strotime()函数失败的原因)。如果为空,我将尝试将要保存的值设置为“”

我是否需要在字段中保存一个空值“”,或者日期类型是否意味着它必须有一个日期格式的值?

假设
$this->determination\u date
在中,
$databaseDate
在您的代码中永远不会为空,因为
strotime()
date()
总是返回值(包括
false
)。您需要检查
$niceDate
是否具有有效值,如果没有,则使用空字符串

您还可以使用
=
而不是
=
作为赋值运算符,这是PHP不会报告的逻辑错误


$niceDate的值是什么?
$niceDate的值是空的或空的,这就是为什么它会这样显示。它是相同的日期,但格式不同。基本上,用户希望数据的格式不同,所以我在前端使其看起来不同,但将其还原为数据库的正确格式。@MatthewSmart我想你得到了困惑。您有一个日期类型,一个空字符串将计算为您看到iirc的日期。如果您根本不想要日期,您需要为该列插入一个NULL。可能是错误的。我投票赞成困惑。您在代码中将值设置为1970,或者是在从db中提取该值之后或之前。这会将其作为1970/01/01保存在数据库中。您仍然是吗确实要使用空字符串进行插入,如:insert into TABLENAME(name,justitution_day)values('tester','');它一定是闹鬼了。或者您仍然在使用
date()设置日期
在代码的另一个地方,请回答以下问题:请问您的
$this->decision\u date
的格式是什么。如果日期以
/
分隔,则采用美式日期格式。如果日期以
-
分隔,则采用欧洲格式。如果日期以美式格式分隔,则采用格式de>-则该月可视为>12,因此无效,因此
strotime()
生成等同于1970/1/1的无效日期
        $niceDate = $this->judgement_date;
        $databaseDate = date("Y-m-d", strtotime($niceDate));
        if(is_null($databaseDate)){
            $databaseDate == '';
        }
        $this->judgement_date = $databaseDate;
    $niceDate = $this->judgement_date;
    if(empty($databaseDate)){ // null is empty
        $databaseDate = '';
    }
    else {
        $databaseDate = date("Y-m-d", strtotime($niceDate));
    }
    $this->judgement_date = $databaseDate;