目次一覧
状態:-
閲覧数:1,652
投稿日:2020-02-06
更新日:2020-02-06
エラーメッセージ / エラー原因 / エラー対応
従来 / 問題発生 / エラー原因はすぐに判明したが
<input type="date">を未入力のまま送信した場合の問題
従来 / 問題発生 / エラー原因はすぐに判明したが
<input type="date">を未入力のまま送信した場合の問題
エラーメッセージ / エラー原因 / エラー対応
エラーメッセージ
致命的エラー:キャッチされていないPDOException:SQLSTATE [22007]:無効な日付時刻形式:1292不正な日付時刻値
( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'tweet_create_datetime' at row 1 in /var/www/html/XXXX/core/DbRepository.php on line 42
エラー原因
MySQLのdatetime型カラムへ対してdatetime型以外の値を挿入しようとしたことに対するエラー
エラー対応
案1.datetime型の値を挿入
案2.datetime型カラムのデフォルト値をNULLへ設定してNULLを挿入
従来 / 問題発生 / エラー原因はすぐに判明したが
従来
MySQL
'tweet_create_datetime' カラムのデフォルト値は、CURRENT_TIMESTAMP
HTML
<input type="date" name="tweet_create_datetime" required>
問題発生
HTML の required を削除したら下記エラー発生
( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'tweet_create_datetime' at row 1 in /var/www/html/XXXX/core/DbRepository.php on line 42
エラー原因はすぐに判明したが
エラー原因
MySQLのdatetime型カラムへ対してdatetime型以外の値を挿入しようとしたことに対するエラー
エラー対応
未入力の場合は、datetime型カラムへ対して何の値を挿入すれば良いの?
・案1.NULL
・案2.’0000-00-00 00:00:00’
「案1.NULL」を採用
MySQLの0000-00-00 00:00:00は使ってはならない
・MySQLのDATE型初期値は厄介者<input type="date">を未入力のまま送信した場合の問題
<input type="date">を未入力のまま送信した場合の問題
修正前のコード
$tweet_create_datetime = $this->request->getPost('tweet_create_datetime');
修正1回目のコード
・NULLを受け取ることを期待したが、変数をデバッグすると、空文字
・<input type="date">を未入力のまま送信した場合に、NULLを受け取ることは出来ない。また、未送信とすることも出来ない(空文字を必ず受信してしまう)
$tweet_create_datetime = $this->request->getPost('tweet_create_datetime') ?? NULL;
・Noticeエラー回避 / PHP7以上で使用可能なnull合体演算子(??)を使用修正2回目のコード
$tweet_create_datetime = $this->request->getPost('tweet_create_datetime');
if ('' == strval($tweet_create_datetime)){//空文字だったら;
$tweet_create_datetime = NULL;
}
・<input type="date" name="hoge">を未入力のまま送信した場合は、NULLを受け取りたい