質問: $pdo->prepare('INSERT INTO posting_data (piyo,hoge) VALUES(:piyo,:hoge)'); $stmt->bindParam(':piyo',$piyo,PDO::PARAM_STR); $stmt->bindParam(':hoge',$hoge,PDO::PARAM_STR); $stmt->execute(); }catch(PDOException $e){ exit('データベース接続失敗。'.$e->getMessage()); } ```
回答: 1. NOT NULLの設定はNULLデータを受け取った場合エラーを返すものはないのでしょうか?それとも phpmyadmin上の構造の設定に問題がるのでしょうか? →参考元に誤りがあり、nullのところのチェックをつけるとnullを許容してしまう。またデフォルト値のプルダウンはチェックをつけた時点でnullになるかもしれないが、後から変更可能。参考元のおかしさをphpMyAdminの構造に帰責しないでほしい。 2. 仮にMYSQLがエラーを返す場合(NULL値を受け付けないのにNULLを受け取った場合)にはどの様な 処理を実行しようとするのでしょうか? →エラーが返されて、insertされない * not nullの意味 nullは値がないことを表現しており、値がないことを許さないことには一定の意味がある。たとえ空文字("")が入ったとしても。 また、null値はプログラム側でエラーを起こしやすい、ハンドリングしにくい値なので、最低でも文字列("")になっていることが保証できることには意味がある。 * 空文字が入ってしまうことのリスクが防げない 入力値として""が不正というのは、アプリの制約。"20"は年齢としては不正ではないかもしれないが、メールアドレスとしてなら不正。 intやdatetimeなどの型を適切に利用したり、外部参照キーを利用したり、unique制約を利用することで、不正な値を防ぐこともできるが、全てのあり得る入力をDBの既存機構だけで防ごうという想定には無理がある