我在這裏和其他地方看到一些問題,在某些情況下解決這個問題,但不是我所需要的。插入空的日期/時間到MySQL與PHP導致0000-00-00/00:00:00
我正在使用一個腳本,它存儲一個值的數組來做插入或更新的基礎上的變化。
某些日期/時間已設置,有些爲空。我試圖用$ var = NULL,然後插入插入...('{$ var}'),如果時間設置爲null和時間爲00:00:00。
用$ var =「NULL」插入並插入...('{$ var}'),如果時間設置爲null,則返回00:00:00。
如果我刪除插入...({$ var})的引號,如果它爲空,但是如果日期不爲空,它當然會失敗。
我有另一個VARCHAR字段,我正在做同樣的事情,它工作正常。即如果有一個字符串它作爲一個字符串傳遞,如果它是空的,我設置該var = null。我在插入查詢中使用了引號,如果它爲空,它將作爲空值進入,如果不爲空,則插入字符串。
使用條件語句將需要一個相當大的重寫,所以我希望能夠避免這種情況。
有關如何使這項工作沒有IF語句(如果可能)的任何建議,將有所幫助。
謝謝。
我已經測試這幾種方式,我不能夠得到想要的結果未做日期/時間字段VARCHAR,這是我不想做的事。這裏是db結構,插入查詢和結果。
id int(11) No None AUTO_INCREMENT
event_new_date_start date Yes NULL
event_new_time_start time Yes NULL
event_link varchar(150) latin1_swedish_ci Yes NULL
$event_new_date_start1 = 'NULL';
$event_new_time_start1 = 'NULL';
$event_link1 = 'NULL';
$event_new_date_start2 = '2011-04-04';
$event_new_time_start2 = '13:13';
$event_link2 = 'http://abc.com';
$event_new_date_start3 = NULL;
$event_new_time_start3 = NULL;
$event_link3 = NULL;
mysql_query("
insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
('{$event_new_date_start1}', '{$event_new_time_start1}', '{$event_link1}')
");
mysql_query("
insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
('{$event_new_date_start2}', '{$event_new_time_start2}', '{$event_link2}')
");
mysql_query("
insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
('{$event_new_date_start3}', '{$event_new_time_start3}', '{$event_link3}')
");
1 0000-00-00 00:00:00 NULL
2 2011-04-04 13:13:00 http://abc.com
3 0000-00-00 00:00:00
當我將日期/時間字段更改爲CHAR時,它按預期在查詢中使用引號工作。
4 NULL NULL NULL
5 2011-04-04 13:13 http://abc.com
6
賓果。爲你+1。 – ceejayoz 2011-05-22 01:36:18
我也測試了這個,不幸的是,有些日期爲空,有些不是,沒有引號,非空日期正確,但空值爲0。沒有引號時,非空日期會引發錯誤。我猜測解決這個問題的唯一方法是做IF來查看該值是否爲空並動態創建查詢。 – Jazzy 2011-05-23 01:08:28
如果您使用PDO並準備好語句,您的生活將會變得更加輕鬆;它會將NULL作爲NULL並將日期包含在引號中。這也將使SQL注入預防變得更容易。 – 2011-05-23 05:35:30