重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

こんばんわ。お世話になります。

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}%'あたりの書き方が悪いのでしょうか。
お手数おかけいたしますがアドバイスの程お願いいたします。

A 回答 (2件)

>character_set_server latin1



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

お世話になっております。

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

お礼日時:2009/10/05 16:53

書き方に問題はなさそうですが、もしかして、SQL文の実行から参照結果を表示あるいは処理している部分に問題があるのではないでしょうか。


試しに、LIKE を使わないで name='abc' などとして、絶対に対象がある文字列で実行してみてはどうでしょうか。
エラー表示はどのような設定がされているのかわかりませんが、エラーが発生しているのにメッセージを非表示にしているとか。

この回答への補足

回答ありがとうございます。いろいろ検証してみました。

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

と表示されます。どこがまずいのでしょうか。

補足日時:2009/10/05 12:47
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す