我有可选的日期和时间表单字段,它们组合形成一个DATETIME
友好的字符串,然后将其发送到MySQL数据库。相关的MySQL列数据类型为DATETIME
,默认值为NULL
。当日期和时间字段完成时,它可以正确保存;但是,当这些可选的表单域为空时,日期时间将被存储为0000-00-00 00:00:00
而不是NULL
。它需要被存储为NULL
,我不知道它为什么不是。这里是我的代码:空的DATETIME值在MySQL中存储为0000-00-00 00:00:00而不是NULL
$Date_Query_Received1 = mysqli_real_escape_string($conn, $_POST['Date_Query_Received']);
$Date_Query_Received2 = implode("-", array_reverse(explode("/", $Date_Query_Received1)));
$Time_Query_Received1 = mysqli_real_escape_string($conn, $_POST['Time_Query_Received']);
$Time_Query_Received2 = $Time_Query_Received1.':00';
if (empty($_POST['Date_Query_Received']) || empty($_POST['Time_Query_Received'])) {
$Date_Query_Received = NULL;
$Time_Query_Received = NULL;
} else {
$Date_Query_Received = $Date_Query_Received2;
$Time_Query_Received = $Time_Query_Received2
}
$Date_Time_Query_Received = $Date_Query_Received.' '.$Time_Query_Received;
mysqli_query($conn, "INSERT INTO log (Date_Time_Query_Received) VALUES ('$Date_Time_Query_Received')";
形式的日期是在DD/MM/YYYY格式,因此implode(...array_reverse(...))
转换到MySQL友好DATETIME
YYYY-MM-DD格式。这同样适用于将':00'附加到时间值,因为表单字段jQuery timepicker仅设置为hh:mm - 不需要秒。
也许它与SQL语句中的引号$Date_Time_Query_Received
有关;但是没有它们,查询就会失败。
这可能是一个重复的问题;然而,答案并不能帮助我。我已经知道MySQL DATETIME接受NULL值,我的问题是PHP似乎将空表单字段条目转换为空字符串,然后在我的数据库中不会转换为NULL条目,尽管我已将列设置为NULL默认。如果我错过了希望我的观点,请告知。我试过了这个例子$ sql ='INSERT INTO table(col1,col2)VALUES('。$ col1。','。(empty($ col2)?NULL:“$ col2”)。')';但数据库字段仍然显示0000-00-00 00:00:00而不是NULL。 – jimbo80