在我的网站上,托管在一个照明灯堆栈上,我有一个简单的html POST表单,其中包含大量输入,以及两个日期时间本地输入。
<form>
...
<input id="PublicationDate" type="datetime-local" name="PublicationDate"/>
<input id="ExpirationDate" type="datetime-local" name="ExpirationDate"/>
...
</form>这些输入与MySQL表中的两个日期时间字段相匹配:
...
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设置为NULL。
添加字段后,如果将这些字段保留为空(为了使NOW()和NULL作为值),查询将失败。
我认为这个问题是由日期时间本地输入引起的,因为为了将相应的行设置为NULL,我没有问题将字幕字段保留为空。知道我怎么能解决这个问题吗?
编辑:
$Data数组是作为参数传递给函数的$_POST数组。
发布于 2017-06-20 12:44:40
插入它时,您正在检查其中一个值是否为NULL,而另一个则根本不检查。
但是,当表单被发送进来时,这些值将不是NULL,它们将是空字符串,所以如果它们是空的,您可能希望将它们设置为空:
$Query->bindParam(4, $Data["PublicationDate"] ?: null);
$Query->bindParam(5, $Data["ExpirationDate"] ?: null);请注意,这是非常基本的,您应该向您的字段添加真正的验证,以检查它们是否与您期望的匹配。
https://stackoverflow.com/questions/44653042
复制相似问题