- ベストアンサー
PHPとMySQLを用いた登録フォームにおけるエラーの解釈と違いについて
- プログラマ初心者が登録フォームからPOSTで情報をデータベースに格納する際に生じたエラーについて解釈してもらいたい。
- Unknown columnというエラーメッセージが表示された理由と、VALUESにおける変数の表記方法の違いについて教えてほしい。
- 初歩的な質問かもしれないが、理解を深めたいのでご教授いただきたい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか? クォーテーションでくくらなくていいのは数値(intやdoubleなど)だけです。 文字列型(varcharやcharなど)のフィールドはデータ投入時はクォーテーションでくくります。 SQLでは基本中の基本のルールですので覚えておいたほうがよいと思います。 ほかのプログラミングでも多かれ少なかれ同等のルールがあります。 またシングルクォーテーションでくくる場合ダブルクォーテーションと競合しない メリットがあります。 PHPなどではダブルクォーテーションが変数の展開につかえるので、SQL文には シングルクォーテーションを使うのが一般的です。
その他の回答 (2)
- demesuke
- ベストアンサー率50% (1/2)
それってSQL文の問題だと思いますよ。 insert into tablename (data) values ('hoge'); → ○ insert into tablename (data) values (hoge); → × カラムの型がchar, varchar,text型などの場合はシングルクオートが必要です。
お礼
なるほど、やはりただの初歩的なミスなんですね・・・ この時クォートで括らないとどの様に解釈されているのかが気になる所ですが、 それはもう開発者に聞くしか無いんですかね^^; ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
>$sql = "INSERT INTO $table (data) VALUES ($data)" SQLの書式を理解していますか? この例ですと、$tableのテーブルの「data」フィールドに$dataというデータを 挿入しています。もしエラーがでているなら (1)$tableにきちんとテーブル名が設定されていない (2)$tableにdataフィールドがない (3)$dataを挿入する際にきちんとクォーテーションでくくっていない などがあげられます。 $sql = "INSERT INTO `$table` (`data`) VALUES ('$data')"; あたりからはじめてください
お礼
早速の回答ありがとうございます。 >SQLの書式を理解していますか? INSERT INTO $table でテーブルを指定し、dataのフィールドに$dataの値を入れるものだと理解しています。 テーブルはきちんと指定した状態で、フィールドもキチンとある状態で行い、 サーバーへのコネクト、DBの選択、$sqlの代入、mysql_query()でそれぞれ値を表示させて 確認をしながら行ないました。 echoで$sqlを表示した時にきちんと表示されていたので代入までは出来ていたのですが、mysql_query()を行うとエラーが発生していました。 ただ、質問の所にも書いた通り、VALUES($data)をVALUES('$data')に変えたところ、エラーは無くなったのですが、$sqlを表示させた時にVALUESの中に入っていた値は見かけ上変わっていなかったので、プログラミング上でどの様な解釈の違いがあるのかをお聞きしたくて質問させて頂きました。 原因の3番目にクォーテーションでくくっていない事を挙げていますが、シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか? よろしくお願いします。
お礼
文字列を扱う場合にはクォートで括る必要があるのですね・・・ まだ、どんな解釈がされていたのか気になる所ではありますが、開発者にでも聞かないと 分からなそうですね^^; 回答ありがとうございました。