人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP And MySQL

PHPからデータをMySQLに挿入する際、エスケープ処理をするため test'hoge' のようなデータを入力するとMySQLには test\'hoge\' のように入力されます。

しかしこのデータが入ったレコードを検索するとSQLで select * from table where test = 'test\'hoge\''ではヒットしません。どうすればいいのでしょうか?

ソースコードとともに説明お願いいたします。

●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:hoge MySQL PHP SELECT SQL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●60ポイント

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\''では無論だめでした。

ほかの方法でもだめでした。

よろしくお願いいたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ