我试图在表单插入中允许空日期(对于永久类型禁止),但是如果字段留空,它将插入 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)
);
我想通过将持续时间保留为空来启用永久禁止,我的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'>";
}
?>
从我所读到的,以及我所能发现的,上面的空值被存储为 ''
所以当它插入时,它只是默认返回到 00:00...etc
. 我找不到一个关于如何修复它的答案,很多想法都说要把它去掉 ''
当别人说要包括他们的时候,我试过了 ({$banDuration})
在我的 INSERT
但问题是一样的。
我不完全理解prepared语句,因为我对它是一个非常新的概念,并且希望有一种方法可以将null存储为一个空白实体,如果用户将其留空,则将其传递给db。
2条答案
按热度按时间v7pvogib1#
尝试保存的“null”字符串有问题。你可以用这样的方法:
6ioyuze22#
我可以通过更改变量来解决此问题:
发件人:
$banDuration = NULL ;
至$banDuration = "NULL" ;
我的插入声明来自:VALUES (".$_POST["banmember_name"]."',NOW(),'$banDuration') ";
到VALUES ('".$_POST["banmember_name"]."',NOW(), (".$banDuration.")) ";
结果:不确定这是否是最好的解决办法,但它解决了我的问题。