- ベストアンサー
数字ならできるのですが、文字だとできません。
フォームにデータを入力しSubmitを押すとデータベースに データを書き込むというプログラムについて分からないことが あります。 フォームに「数字」を入力し送信を押すとクエリの送信に成功し データベースに書き込みができるのですが、 「日本語や英語などの文字」を入力し送信すると、クエリの送信に失敗し データベースに書き込みができません。 文字を入力するフィールドは varchar(40) sjis_japanese_ci NULL で作成しました。 DBに書き込むPHPは以下のとおりです。 <?php require_once("db.php"); $prefCd = $_POST['cd']; $prefName = $_POST['name']; $aff = $_POST['no']; $plname = $_POST['lname']; $pfname = $_POST['fname']; $sql = "INSERT INTO db VALUES(".$prefCd.",".$prefName.",".$aff.",".$plname.",".$pfname.")"; $result = executeQuery($sql); ?> 数字だと書き込みがDBに書き込みができることから DBのフィールドの作成の方法が間違っているのかとは おもうのですが。。。 どなたかご教授下さい。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
INSERTするときはシングルクォーテーションで値をくくってください。 すべてのプログラムやSQLの基本中の基本です。 (数値は囲まなくても、数値として認識されますが、囲んでも問題ありません)
その他の回答 (1)
- altrn
- ベストアンサー率62% (10/16)
直接関係はないのですが、 上記コードで、POSTで受けとったものを そのままSQLに入れているのですが、これは少し危険かと思われます。 http://www.google.com/search?hl=ja&q=sql%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3&btnG=%E6%A4%9C%E7%B4%A2 MySQLを利用しているのでしたら、 下のような関数が使えるかと思います。 http://jp2.php.net/manual/ja/function.mysql-real-escape-string.php 文字列を入れるには、上の方の回答のように、 シングルクォーテーションで囲うといいと思いますが、 たとえば、単純に 文字列それ自体にシングルクォーテーションがあった場合など (I'mとかWhat'sなど) にもまずいと思われますので... 上記コードが単にサンプルで、上記内容をご存知でしたら すみません。
お礼
アドバイスいただきましてありがとうございます。 セキュリティ面にも気を配ってこれから 勉強したいと思います。 ありがとうございました。
お礼
おかげさまで問題解決する事ができました。 大変感謝しています。 ありがとうございました。