Php &引用;“本地日期时间”;空输入导致MySQL查询失败

Php &引用;“本地日期时间”;空输入导致MySQL查询失败,php,mysql,forms,datetime,Php,Mysql,Forms,Datetime,在我的网站上,托管在一个LAMP堆栈上,我有一个简单的html POST表单,其中包含一组输入和两个datetime本地输入 使用以下php代码: // Prepare query $Query = $this->DB->prepare(" INSERT INTO Article(Title, Subtitle, Author, PublicationDate, ExpirationDate, Body) VALUES(?, ?, ?, IFNULL(?, NOW()), ?, ?)

在我的网站上,托管在一个LAMP堆栈上,我有一个简单的html POST表单,其中包含一组输入和两个datetime本地输入

使用以下php代码:

// Prepare query
$Query = $this->DB->prepare("
INSERT INTO Article(Title, Subtitle, Author, PublicationDate, ExpirationDate, Body)
VALUES(?, ?, ?, IFNULL(?, NOW()), ?, ?)");
$Query->bindParam(1, $Data["Title"]);
$Query->bindParam(2, $Data["Subtitle"]);
$Query->bindParam(3, $Username);
$Query->bindParam(4, $Data["PublicationDate"]); // <-
$Query->bindParam(5, $Data["ExpirationDate"]); // <-
$Query->bindParam(6, $Data["Body"]);
//准备查询
$Query=$this->DB->prepare(“
插入文章(标题、副标题、作者、出版日期、到期日期、正文)
值(?,?,IFNULL(?,NOW()),?,?)”;
$Query->bindParam(1,$Data[“Title”]);
$Query->bindParam(2,$Data[“Subtitle”]);
$Query->bindParam(3,$Username);
$Query->bindParam(4$Data[“PublicationDate”]);//bindParam(5$Data[“ExpirationDate”]);//bindParam(6,$Data[“Body”]);
一开始,使用相同的MySQL/Php设置,但html表单中没有实际字段,一切正常:PublicationDate设置为
NOW()
,而ExpirationDate设置为
NULL

添加字段后,如果我将这些字段留空(以便将
NOW()
NULL
作为值),查询将失败

我认为这个问题是由datetime本地输入引起的,因为我可以将Subtitle字段保留为空,以便将相应的MySQL行设置为
NULL
。你知道我怎样才能解决这个问题吗

编辑:
$Data
数组是作为参数传递给函数的
$\u POST
数组

插入时检查其中一个值是否为NULL,而另一个值则根本不检查

但是,当发送表单时,值不会为NULL,而是空字符串,因此如果值为空,您可能希望将其设置为NULL:

$Query->bindParam(4, $Data["PublicationDate"] ?: null);
$Query->bindParam(5, $Data["ExpirationDate"] ?: null);

请注意,这是非常基本的,您应该向字段中添加真正的验证,以检查它们是否符合您的期望。

插入时,您正在检查其中一个值是否为NULL,而另一个值则根本不为NULL

但是,当发送表单时,值不会为NULL,而是空字符串,因此如果值为空,您可能希望将其设置为NULL:

$Query->bindParam(4, $Data["PublicationDate"] ?: null);
$Query->bindParam(5, $Data["ExpirationDate"] ?: null);
请注意,这是非常基本的,您应该向字段添加真正的验证,以检查它们是否符合您的期望

$Query->bindParam(4, $Data["PublicationDate"] ?: null);
$Query->bindParam(5, $Data["ExpirationDate"] ?: null);