2012-08-16 110 views
1

我已經搜索了該網站,雖然我發現了類似的問題和答案,但我一直無法找到答案。經過4個小時的搜索後,我決定咬緊牙關,問問題。使用MySql在數據庫中輸入日期或空值

我有4個不需要的窗體中的日期字段。如果其中一個字段有條目,我希望它將日期輸入到數據庫中;如果任何一個字段留空,我希望它輸入一個日期。

我有一個if語句來檢查值是否爲空,如果是這樣的話$value = null,否則使用$value = date("Y-m-d",strtotime($_post['value']))將它轉換爲日期,這很好。

問題出在我的查詢中。如果我使用'$ value',它會正確插入日期,但不會插入空值,因爲使用'null'會使sql認爲它是一個字符串。如果我只使用$ value,那麼null插入就好了,但是日期以0000-00-00的形式出現。

任何意見將非常感激

感謝迄今意見...

空是允許的,這是我的腳本...

if(empty($_POST['fp32_original_install_date'])){ 
$fp32_install = NULL; 
    }else{ 
$fp32_install = date("Y-m-d",strtotime($_POST['fp32_original_install_date'])); 
} 

$sql = "INSERT INTO accounts_cstm (id_c, support_c, install_date_c, sware_renewal_date_c, product_key_c, account_status_c, fp32_support_type_c, fp32_support_renewal_date_c, fp32_original_install_date_c) VALUES ('$Guid','$cdr_support', '$cdr_install', '$cdr_renew', '$prod_key', '$account_status', '$fp32_support', '$fp32_renew', $fp32_install)"; 

如果我在使用查詢$ fp32_install一個空值進入就好,但日期進入作爲0000-00-00,如果我使用'$ fp32_install'日期進行罰款,但NULL值作爲1970-01-01進入(可能是因爲它將'NULL'視爲一個字符串)

如果我回顯$ fp32_install,則值顯示爲2012-08-16,列的SQL類型爲日期,默認值爲NULL

+0

不會使用具有適當佔位符的PDO來處理您的轉義嗎? – tadman 2012-08-16 16:06:44

+0

看來你在MySQL上的日期字段不允許爲'NULL' – GusDeCooL 2012-08-16 16:06:50

+1

請在你的問題中包含你的代碼。當我們看到代碼示例時,回答起來要容易得多。 – kapa 2012-08-16 16:06:59

回答

1

如果您使用表單中的張貼值,則$ _POST ['值']不會爲NULL。

您應該檢查空值而不是。

if($_POST['value']=="") 
{ 
    $value="NULL"; 
} 
else 
{ 
    $value="'".date("Y-m-d",strtotime($_POST['value']))."'"; 
} 
+0

謝謝你,這個伎倆 – tatty27 2012-08-16 17:23:19

0

從你描述的行爲,聽起來就好像你的DATE列與DEFAULT 0條款規定,或者您所提供的值無效。

根據MySQL文檔:

<剪斷>

無效的日期,DATETIME或TIMESTAMP值被轉換爲適當的類型的「零」值( '0000-00-00' 或'0000-00-00 00:00:00')。

< /剪斷>

這是很難診斷確切的問題,沒有看到示例代碼。作爲初學者,我建議您嘗試回顯正在發送到數據庫的SQL語句。

我強烈懷疑DATE列的值將與其周圍顯示引號,字符串值爲'NULL',而不是裸關鍵字NULL