首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"datetime-local“空输入导致MySQL查询失败。

"datetime-local“空输入导致MySQL查询失败。
EN

Stack Overflow用户
提问于 2017-06-20 12:25:33
回答 1查看 146关注 0票数 1

在我的网站上,托管在一个照明灯堆栈上,我有一个简单的html POST表单,其中包含大量输入,以及两个日期时间本地输入。

代码语言:javascript
复制
<form>
...
    <input id="PublicationDate" type="datetime-local" name="PublicationDate"/>
    <input id="ExpirationDate" type="datetime-local" name="ExpirationDate"/>
...
</form>

这些输入与MySQL表中的两个日期时间字段相匹配:

代码语言:javascript
复制
...
PublicationDate DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
ExpirationDate DATETIME,

使用这个php代码:

代码语言:javascript
复制
// 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数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-20 12:44:40

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

但是,当表单被发送进来时,这些值将不是NULL,它们将是空字符串,所以如果它们是空的,您可能希望将它们设置为空:

代码语言:javascript
复制
$Query->bindParam(4, $Data["PublicationDate"] ?: null);
$Query->bindParam(5, $Data["ExpirationDate"] ?: null);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44653042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档