出現 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
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記