我有可選的日期和時間表單字段,它們組合形成一個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