馬鹿の一つ覚えのSQL文の書き方に気をつけろ

FXやべぇ! by you.

着実に開発に遅れが発生しているミニブログ開発ですが、ここに来て勉強しながらの開発はやはりしんどいということと、たいした内容でないのに馬鹿のひとつ覚えだけでプログラミングしていると、意味がわからずにつまづいたりハマったりすることが多々あります。

ある日を境にして、Web上はちゃんと動いているが、自分のPC内の開発環境では投稿が出来ないという不具合が発生していました。


原因がすぐにはわからず、該当ファイルのindex.phpを何度も書き変えていたのでどこかがおかしくなったとか、目で違うところを追っかけて確認していました。すると不具合らしきところは見当たらない・・・。しばし悩むこと1時間。

馬鹿の一つ覚えでマスターしたつもりになっていたSQL文が犯人でした。

以前のコードでは

$sql = “INSERT INTO articles VALUES ( ”,'”. $username . “‘,'”. $comment. “‘,'”. $radio . “‘,'”. $set_time . “‘ );”;

と投稿データベースにカラムひとつひとつに1対1対応するように順番に書き込む値の変数をセットしていました。
しかし、先週かずっと前(?)あたりに開発環境のほうで「コメント返信用」の情報を保存するフィールドをデータベースに作っていました。すると上記のSQL文では矛盾が発生し書き込めなくなる、ということのようでした。

結論としてはデータベースに書き込むときにカラム名を指定して一対一対応させることによって解決しました。

$sql = “INSERT INTO articles (username,comment,jyanru,datetime) VALUES ( ‘”. $username . “‘,'”. $comment. “‘,'”. $radio . “‘,'”. $set_time . “‘ );”;

ほんのちょっとのことですが、これだとデータベースのカラムが増えたときにも今回のような不具合が起きることを防ぐことができます。

そしてもうひとつ得られた教訓として「投稿テストするときにエラー表示も何もないから、きちんと投稿されたかどうか気づきにくい」という点です。データベースへの書き込み時にエラーが発生したときに画面上にエラー表示を明示しないと、それに気づかないことすらあるということです(実は書き込めてないことにしばらく気づいてなかったw)。

そこで

  1. SQL文の書き方に気をつける
  2. データベースエラーがあるかどうかを判断してエラーメッセージを表示する

ということを今回は教訓にしました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です