電子書籍の厳選無料作品が豊富!

こんにちは。プログラマ初心者です。
今回phpとMySQLを用いて登録フォームから
情報をデータベースに格納するコントローラーを作ったのですが、その際のエラーで何が起きていたかが良く分からない事があったので理由を教えていただければと思います。

まず、登録フォームからはPOSTで情報を飛ばす事になっていて、
飛んできたデータを
$data = mysql_real_escape_string($_POST['data']);
のようにしてエスーケプ処理を行い変数に入れ、
$sql = "INSERT INTO $table (data) VALUES ($data)"
$result = mysql_query($sql, $link);
として値を格納しようとしたところ
Unkown column~for listというエラーが出てしまいました。
最終的に VALUES('$data');
と書けば正常に格納される事が分かったのですが、
今回のエラーではどのような解釈をされていたのでしょうか?

何故「不明のコラム」というエラーになったのか
また、VALUESにおける$data と '$data'の違いは何なのでしょうか?

初歩的でバカバカしい質問かもしれませんが、ご教授よろしくお願い致します。

A 回答 (3件)

>シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか?



クォーテーションでくくらなくていいのは数値(intやdoubleなど)だけです。
文字列型(varcharやcharなど)のフィールドはデータ投入時はクォーテーションでくくります。
SQLでは基本中の基本のルールですので覚えておいたほうがよいと思います。
ほかのプログラミングでも多かれ少なかれ同等のルールがあります。

またシングルクォーテーションでくくる場合ダブルクォーテーションと競合しない
メリットがあります。
PHPなどではダブルクォーテーションが変数の展開につかえるので、SQL文には
シングルクォーテーションを使うのが一般的です。

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/string-sy …
    • good
    • 0
この回答へのお礼

文字列を扱う場合にはクォートで括る必要があるのですね・・・

まだ、どんな解釈がされていたのか気になる所ではありますが、開発者にでも聞かないと
分からなそうですね^^;

回答ありがとうございました。

お礼日時:2011/05/06 12:02

それってSQL文の問題だと思いますよ。


insert into tablename (data) values ('hoge'); → ○
insert into tablename (data) values (hoge); → ×

カラムの型がchar, varchar,text型などの場合はシングルクオートが必要です。
    • good
    • 0
この回答へのお礼

なるほど、やはりただの初歩的なミスなんですね・・・
この時クォートで括らないとどの様に解釈されているのかが気になる所ですが、
それはもう開発者に聞くしか無いんですかね^^;

ありがとうございました。

お礼日時:2011/05/06 11:59

>$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')";

あたりからはじめてください
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

>SQLの書式を理解していますか?
INSERT INTO $table でテーブルを指定し、dataのフィールドに$dataの値を入れるものだと理解しています。

テーブルはきちんと指定した状態で、フィールドもキチンとある状態で行い、
サーバーへのコネクト、DBの選択、$sqlの代入、mysql_query()でそれぞれ値を表示させて
確認をしながら行ないました。
echoで$sqlを表示した時にきちんと表示されていたので代入までは出来ていたのですが、mysql_query()を行うとエラーが発生していました。

ただ、質問の所にも書いた通り、VALUES($data)をVALUES('$data')に変えたところ、エラーは無くなったのですが、$sqlを表示させた時にVALUESの中に入っていた値は見かけ上変わっていなかったので、プログラミング上でどの様な解釈の違いがあるのかをお聞きしたくて質問させて頂きました。
原因の3番目にクォーテーションでくくっていない事を挙げていますが、シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか?
よろしくお願いします。

お礼日時:2011/05/05 19:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!