"日期时间本地" null输入导致MySQL查询失败

时间:2017-06-20 12:25:33

标签: php mysql forms datetime

在我的网站上,托管在LAMP堆栈上,我有一个带有大量输入的简单html POST表单,以及两个 datetime-local 输入

<form>
...
    <input id="PublicationDate" type="datetime-local" name="PublicationDate"/>
    <input id="ExpirationDate" type="datetime-local" name="ExpirationDate"/>
...
</form>

这些输入与MySQL表中的两个 Datetime 字段匹配:

...
PublicationDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ExpirationDate 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"]);

一开始,使用相同的MySQL / Php设置但没有html表单中的实际字段,一切正常: PublicationDate 设置为NOW() ExpirationDate < / strong>到NULL

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

我认为这个问题是由 datetime-local 输入引起的,因为我将 Subtitle 字段留空是没有问题的,以便将相应的MySQL行设置为{ {1}}。知道如何解决这个问题吗?

编辑:

NULL数组是作为函数

的参数传递的$Data数组

1 个答案:

答案 0 :(得分:0)

当您插入NULL时,您正在检查其中一个值,而根本不检查另一个值。

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

from picamera import PiCamera
camera=PiCamera()
camera.start_recording("video.h264")
camera.wait_recording(60*5)
camera.stopr_preview()
camera.close()

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