- ベストアンサー
= などの特定な文字をMySQLに入力すると以降の文字が消えてしまいます。
PHPで作成したアプリケーションからMySQLにデータを登録する際、 = を含むとそれ以降の文字が登録されません。 又、'や"といったsqlに含まれる文字を入力しても保存されません。 どうすればちゃん保存されなおかつSQL Injectionに対応できるのでしょうか? よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
簡便に「=」を含むSQL文を書いてみてください。 検証してみます。それと登録しようとしている フィールドの型と長さもあわせて書いてみてください。 「=」なんて普通の文字なので、特になんの処理も いらないと思います。 INSERT INTO `test` ( `id` , `data` ) VALUES ( '1', 'abc=xyz'); などでdataに「abc」と登録されるということですか?
その他の回答 (2)
- tecinfo
- ベストアンサー率52% (32/61)
MySQLなら、「mysql_escape_string」関数を使いましょう。 詳しくは下のURLに書いてありますが、 http://www.zend.co.jp/tech/index.php?%A5%BB%A5%AD%A5%E5%A5%EA%A5%C6%A5%A3%BB%D8%BF%CB%2FSQL%A5%A4%A5%F3%A5%B8%A5%A7%A5%AF%A5%B7%A5%E7%A5%F3 $sql = "select from foo where name like='%" .mysql_escape_string($key) . "%'"; とすれば、'"=などが入っていても、正常にSQLが扱えるようになります。
お礼
回答ありがとうございました。 実際にmysql_escape_string()やmysql_real_escape_string()などを使用してみたのですがだめでした。 文字と文字の間に=を入力すると=以降の文字が消えてしまうのです。 別な方法として=や'"などを全角に置き換える方法もあるのですが特定の文字を全角に置き換えるにはどうしたらいいのでしょうか?
補足
いまphpMyadminで確かめてみたところ'や";などはしっかりサニタイズできており表示できます。しかし=のみがデータベースに登録されません。 どうぞよろしくお願いいたします。
- inu2
- ベストアンサー率33% (1229/3720)
"や' は \" \' 等としてください = は文字列扱いにすれば良いです 例えばsampleというフィールドに '"= と入れたい場合は sample = '\'\"=' とすれば良いです
お礼
ありがとうございます。 = '\'\"=' とする作業を = と入力しただけでPHPが自動的に行うにはどうしたらいいのでしょうか? よろしくお願いいたします。
お礼
すいません、PHPには原因がありませんでした。 DBに原因があったようです。本当にすいませんでした。
補足
ありがとうございます。 =を含むSQL文ですが、現在作成しているのが小さなWikiシステムで=に限らず日本語、英語、英数字、全角、半角などなどをDBに保存するようにしています。データ型はたんにtextと設定したと思います。 >INSERT INTO `test` ( `id` , `data` ) VALUES ( >'1', 'abc=xyz'); >などでdataに「abc」と登録されるということですか? そうです。 ほげほげhoigegjd何でも=穂下穂下2 の場合 ほげほげhoigegjd何でも はDBに残るのですが =穂下穂下2 は保存されません。 どうしたらいいのでしょうか?