2016-10-09 91 views
1

我正在使用PDO準備語句來插入值。其中一個值是日期,有時可能是空的。在MySQL架構中,日期列被設置爲允許NULL值。如何使用PDO將空字符串插入日期列?

我們假設date_column是一個日期,它允許NULL。當我這樣做:

$query = "INSERT INTO tbl(date_column) VALUES(?)"; 
$stmt = $pdo->prepare($query); 
$stmt->execute(['']); 

這是給我這個錯誤:

SQLSTATE [22007]:無效的日期時間格式:1292不正確的日期值: '在行' 列 'date_column' 1

在phpMyAdmin中,我可以執行這個查詢沒有錯誤。它集日至0000-00-00

INSERT INTO tbl(date_column) VALUES('') 

是不是由PDO在上面的代碼示例在幕後執行相同的查詢?怎麼了?

我想要的是能夠插入空字符串''作爲日期沒有錯誤。如果它被設置爲0000-00-00

+0

如果字符串爲空 - 不要插入它。 –

+0

@u_mulder上面的查詢只是一個例子。我遇到問題的實際查詢插入許多值。 – marmita

回答

0

空字符串我不在乎是不是空... NULL是NULL

$stmt->execute([null]); 
1

這是太長了評論。

這是一個根本性的問題:

All I want is to be able to insert empty string '' as a date.

字符串是字符串,日期是日期。您不應該將空字符串插入列中,因爲這沒有意義。相反,您應該想要插入NULL值或默認值。

所以,你的代碼應該是這樣的:

INSERT INTO tbl(date_column) 
    VALUES(NULL) 

或:

INSERT INTO tbl(date_column) 
    VALUES(DEFAULT) 

,MySQL的做更好的類型上準備好的查詢檢查與參數其實是一件好事,這一事實。

+0

但爲什麼MySQL允許我將空字符串''插入到日期列中,並且日期變成了0000-00-00。我想通過PDO準備好的語句來做到這一點,並插入'',MySQL應該正常處理它,而不會引發錯誤。 – marmita

+0

@marmita。 。 。問題在於''''被轉換爲日期。對於查詢中硬編碼的字符串,這可能發生在編譯階段。對於作爲參數傳入的字符串,編譯階段已經過去,並且執行引擎會在預期日期的字符串處看到該字符串。正如我所說的,最根本的問題是你想給* *日期*列指定一個空的*字符串*。 –

+1

我認爲這個問題與PDO有關。因爲execute()方法將所有參數視爲字符串。只要日期格式正確,它就不會抱怨日期是字符串。它只會在字符串爲空時發出抱怨。 – marmita