• ベストアンサー

PHPからのLIKE検索ができません。

こんばんわ。お世話になります。 PHPからSQLを発行してLIKE検索をしようとしているのですがうまくいきません。(Xampp MySQL) $keyword = htmlspecialchars($_POST['keyword']); mysql_real_escape_string($keyword); $sql = "select * from master where name like '%{$keyword}%'"; テーブル内の name にマッチするはずの言葉があるのにマッチしません。 ちなみに echo $sql; とSQL文を表示させてPhpMyAdminでそれを実行すると、目的の検索結果が表示されます。 いろいろ検索してみたところ、LikeをLike Binary にする方法などがありましたが、どうにもうまくいきませんでした。文字コードはフォーム側、PHP・SQLともにUTF-8です。 '%{$keyword}%'あたりの書き方が悪いのでしょうか。 お手数おかけいたしますがアドバイスの程お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>character_set_server latin1 これがだめですね。 my.ini、my.cnfのどちらの設定ファイルを使っているか分かりませんが、[mysqld]での設定の問題です。 設定変更し、MySQLサーバを停止&再起動して、再度、試してみてください。

infome2009
質問者

お礼

お世話になっております。 現在使っているPCのmy.ini[mysqld]ブロックを変更し、再起動したのですが、latin1のまま変わらず。my.cnfはありませんでした。たまたま前に使っていたPCにmy.cnfが残っており、全てutf8で動いていたものですから、これをコピーし、現在のPCに持ってきたら全てutf8に変わりました。SQL文も問題なく動かすことができました。ありがとうございました。(いつも文字コードがらみでハマってしまいます・・・)

その他の回答 (1)

  • dell_OK
  • ベストアンサー率13% (770/5733)
回答No.1

書き方に問題はなさそうですが、もしかして、SQL文の実行から参照結果を表示あるいは処理している部分に問題があるのではないでしょうか。 試しに、LIKE を使わないで name='abc' などとして、絶対に対象がある文字列で実行してみてはどうでしょうか。 エラー表示はどのような設定がされているのかわかりませんが、エラーが発生しているのにメッセージを非表示にしているとか。

infome2009
質問者

補足

回答ありがとうございます。いろいろ検証してみました。 name = 'abc'はマッチしますが、name = 'あいう'はマッチしません。 またフォームからデータを受け取る際、半角英数字であればマッチするのですが、全角日本語になるとだめです。日本語関係のトラブルでしょうか。 show variables like "char%" すると、 character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8 character_set_server latin1 character_set_system utf8 と表示されます。どこがまずいのでしょうか。

関連するQ&A