![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_11.png?e8efa67)
こんにちは。プログラマ初心者です。
今回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'の違いは何なのでしょうか?
初歩的でバカバカしい質問かもしれませんが、ご教授よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
>シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか?
クォーテーションでくくらなくていいのは数値(intやdoubleなど)だけです。
文字列型(varcharやcharなど)のフィールドはデータ投入時はクォーテーションでくくります。
SQLでは基本中の基本のルールですので覚えておいたほうがよいと思います。
ほかのプログラミングでも多かれ少なかれ同等のルールがあります。
またシングルクォーテーションでくくる場合ダブルクォーテーションと競合しない
メリットがあります。
PHPなどではダブルクォーテーションが変数の展開につかえるので、SQL文には
シングルクォーテーションを使うのが一般的です。
参考URL:http://dev.mysql.com/doc/refman/5.1/ja/string-sy …
文字列を扱う場合にはクォートで括る必要があるのですね・・・
まだ、どんな解釈がされていたのか気になる所ではありますが、開発者にでも聞かないと
分からなそうですね^^;
回答ありがとうございました。
No.2
- 回答日時:
それってSQL文の問題だと思いますよ。
insert into tablename (data) values ('hoge'); → ○
insert into tablename (data) values (hoge); → ×
カラムの型がchar, varchar,text型などの場合はシングルクオートが必要です。
なるほど、やはりただの初歩的なミスなんですね・・・
この時クォートで括らないとどの様に解釈されているのかが気になる所ですが、
それはもう開発者に聞くしか無いんですかね^^;
ありがとうございました。
No.1
- 回答日時:
>$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番目にクォーテーションでくくっていない事を挙げていますが、シングルクォーテーションでくくる事にどのような意味があるのか教えて頂けないでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- JavaScript 【jquery】EasyUIのSubGridにMySQLのテーブルデータを表示&編集にしたい 5 2022/05/02 13:10
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) 格納したデータを配列のように扱う方法はありますか? 8 2023/06/05 08:53
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPからCSVをアップロード後、m...
-
CSVデータの行数カウントをした...
-
別ファイルの構造体の値を読み...
-
CSVファイルの最終行のデー...
-
csvの内容を行単位で削除したい
-
PHP5でCSVの指定行データだけを...
-
配列を回すとき、最後の要素だ...
-
配列の添え字が小数だとどうなる?
-
配列の初期化
-
順位を付ける時のスコアの重複...
-
file_existsでファイル名の部分...
-
foreachのなかで次のキーを参照...
-
チェックボックス複数選択 mys...
-
漢字のソートについて
-
配列の要素(value)に、変数を...
-
マッチング処理(1:N)
-
String だと「 ByRef引数の型が...
-
verilogで、配列の一部をタスク...
-
phpで、連想配列を普通の配列に...
-
配列から順位を算出したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
stdClass Objectを連想配列のよ...
-
CSVデータの行数カウントをした...
-
ヒアドキュメントの中のfor文
-
複数行のデータのPOST処理に関して
-
C言語でCSVファイルの行数を読...
-
While文を使って配列の中身を全...
-
行数が30万件ほどあるCSVから、...
-
CSVファイルの最終行のデー...
-
csvの内容を行単位で削除したい
-
バイナリファイルの内容を、そ...
-
doxygenを使用する環境について
-
PHPで、CSVファイルを、指定し...
-
FortranのOPEN文
-
csvファイルを読み込み→上書き...
-
PHPでCSVの一部の行を編集したい
-
ラジオボタンのチェックの付け方。
-
Ethnaでのsection使用法
-
CSVデータを正規表現で抜き出せ...
おすすめ情報