[DB]intを含めた登録に気をつける

気が付かなかった。

どういう話か

phpmyadmin+phpで登録フォームを作った。

テーブル内には複数のタイプを設定していて、その中にintがあった。

intはNullを設定してた、というか全部にNullを入れてた。

登録フォーム内には必須項目と任意項目を設定していて、intは任意項目にしてあった。

任意項目に入力がなかった場合、空欄のまま登録するようにしてあった。

intを空欄にすると、登録できなかった。

という話。

「0」を設定しましょう

intは空欄にできないという話。
Nullはできるけど空欄「”」は誤り。
数値を扱うにおいて体感的に無はよろしくない(ケースバイケース)ので、だったら「0」にするのがいい。

言い換えると、int型にしたからって勝手に0が入るという話ではないということ。
目的とか完成イメージを持って人の手を入れていかないと予期せぬことは起きますね。

phpのフォーム内容を拾ってDBに突っ込む際、こんな感じにしておく。

$testNum = (empty($_POST['testNum']))? 0 : $_POST['testNum'];

「空っぽだったら0を代入」となる。

上記を踏まえて、これは間違い。

$testNum = (empty($_POST['testNum']))? '' : $_POST['testNum'];

textとかvarcharとかだったらいけるんだけどね、一緒くたにすると詰む。

DB側で設定する事もできる

書いてた。

MySQLでAUTO_INCREMENTが指定されているカラムに「0」を入れるには

勉強は必要だけど

独学の場合、どうしても抜けが出る。

出ないこともあるだろうけど、自分は出る。

全く触れない場合は事前準備が必要だけど、ある程度できるなら事案にぶつかって解消することを繰り返すのがいいかなって思ったりする。
そうじゃないとカバーしきれない、エラーありきで向かっていかないと心が持たない。

色々便利な世の中だけど、地道なトライアンドエラーは欠かせないし、ステップアップが必要で無知のままスキップするのは無理くさいなーってことは、結構あるしいつまでもあるんじゃないかと思いました。

コメント

タイトルとURLをコピーしました