PHPからデータをMySQLに挿入する際、エスケープ処理をするため test'hoge' のようなデータを入力するとMySQLには test\'hoge\' のように入力されます。
しかしこのデータが入ったレコードを検索するとSQLで select * from table where test = 'test\'hoge\''ではヒットしません。どうすればいいのでしょうか?
ソースコードとともに説明お願いいたします。
test'hoge' のようなデータを入力するとMySQLには test\'hoge\' のように入力されます。
まず、実際に MySQL 中にどのようなデータが入っているか確認した方が良いかと思います。
本当に test\'hoge\' のように入力されているのであればそれはエスケープのし過ぎ。
select * from table where test = 'test\\\\'hoge\\\\''
のようになるはずです。
実際には text'hoge' が入力されているのであれば例示されたSQL 文で構わないはずです。
他の書き方としては
select * from table where test = "test'hoge'";
select * from table where test = 'test''hoge'''
等で実行できます。
http://dev.mysql.com/doc/refman/4.1/ja/string-syntax.html
また、PHP 上で記述されているのであれば、PHP の文字列処理で \ が展開されていないかも確認した方が良いでしょう。
(INSERT,SELECT の直前に実行するSQL文を出力して確認)
エスケープのしすぎはまずありません。mysqlAdminでチェック済みです。
select * from table where test = 'test\'hoge\''では無論だめでした。
ほかの方法でもだめでした。
よろしくお願いいたします。