出現 SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column 這個錯誤訊息,表示這個欄位是數值格式,但給予的資料並不是數值,而是字元或是空字串之類的。


但有時確認資料並不是空字串,但mysql卻一直報錯,後來發現原因可能是出現在後端程式或使用的框架的問題。

以Aidec自己的經歷,就是因為使用的框架導致錯誤的。程式內寫入DB的腳本在bind PDO參數時,通通使用PDO::PARAM_STR來綁定

$this->sPdo->bindParam($parameters[0],$parameters[1], PDO::PARAM_STR);

導致傳遞給mysql時,格式就錯掉了。將程式改成下面這樣就解決了。

if(is_int($parameters[1])){ 

    $this->sPdo->bindParam($parameters[0],$parameters[1], PDO::PARAM_INT);

}else{

    $this->sPdo->bindParam($parameters[0],$parameters[1], PDO::PARAM_STR);


題外話,當初看到  Invalid datetime format 還以為是日期格式相關的問題,但後來發現那張表裡面根本沒有關於日期格式的欄位。



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/mysql-Invalid-datetime-format-1366