php - 尝试在表单提交时插入 NULL 日期但得到 00:00
问题描述
我试图在表单插入中允许 NULL 日期(对于永久类型禁令),但如果该字段留空,它会插入0000-00-00 00:00:00
该BannedMembers
表如下所示:
CREATE TABLE BannedMembers
(
BanID INT NOT NULL AUTO_INCREMENT,
MemberID INT NOT NULL ,
WarningSent BIT NOT NULL ,
BannedDate DATETIME NOT NULL ,
BanDuration DATETIME NULL ,
PRIMARY KEY (BanID),
FOREIGN KEY (MemberID)
REFERENCES Members(MemberID)
);
我想通过将持续时间保留为 NULL 来启用永久禁令,我的 HTML/PHP 脚本(删节):
<form method="post" name="banmember_form" id="banmember_form" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Banned Until? (Leave empty for permanent)
<input type="date" class="form-control" name="banmember_duration" id="banmember_duration" placeholder="dd/mm/yyyy">
<button type="submit" name="addbannedmember_submit" id="addbannedmember_submit">Add</button>
</form>
<?php
if(isset($_POST["addbannedmember_submit"]))
{
//Check if the duration is empty (for permanent bans)
if (empty($_POST["banmember_duration"]))
{
$banDuration = NULL ;
}
else
{
$banDuration = $_POST["banmember_duration"];
}
$addBannedMemberSql = "INSERT INTO BannedMembers(MemberID, BannedDate,
BanDuration)
VALUES (".$_POST["banmember_name"]."',NOW(),'$banDuration') ";
$conn->exec($addBannedMemberSql);
echo "<meta http-equiv='refresh' content='0'>";
}
?>
从我读到的内容以及我能够找到的内容来看,上面的 NULL 被存储,''
因此当它插入时它只是默认返回为00:00...etc
. 我找不到如何解决它的答案,许多想法说要删除''
s 而其他人说要包括它们,我尝试({$banDuration})
了我的INSERT
但同样的问题。
我不完全理解准备好的语句,因为我对此很陌生,并且希望有一种方法可以将 NULL 存储为空白实体,以便在用户留空时传递给数据库。
解决方案
我能够通过更改我的变量来解决这个问题:
从:$banDuration = NULL ;
到$banDuration = "NULL" ;
我的 INSERT 声明来自:
VALUES (".$_POST["banmember_name"]."',NOW(),'$banDuration') ";
至
VALUES ('".$_POST["banmember_name"]."',NOW(), (".$banDuration.")) ";
结果:
|ID | Banned Date | Banned Until|
|502 | 2018-10-16 20:03:52 | NULL |
不确定这是否是最好的解决方法,但它解决了我的问题。
推荐阅读
- typescript - 有什么方法可以用 Typescript 中的新成员进行递归部分
- android - kotlin string 有没有像 Objc static NSString kUrl = @"users/%@/profile"; 这样的程序员?
- javascript - 如何让我的 Javascript“动画”更好地工作?
- javascript - getDisplayMedia“无法启动音频源”
- mysql - SELECT … FOR UPDATE 对不存在的行
- assembly - 寄存器周围的括号是什么意思?
- python - 如何将参数视为函数中的参数(如果可行?)
- python - 如何使用变量名来更新类变量
- ruby-on-rails - Rails has_many 通过特定的 id
- typescript - 将数组映射到具有正确类型的对象(仅类型方式)