dポイントプレゼントキャンペーン実施中!

お世話になります。
現在、PHPで作成し運営しているサイトでキーワード検索を設置しているのですが、「野」や「三」など漢字一文字で検索すると
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND ××× = AND ○○○ =' at line 3
というエラーになってしまいます。
別の漢字でエラーにならない場合もありますが、多くの漢字でエラーになってしまい、ググってみたものの対処法がわからず困っています。記述は下記の通りです。

$key = addslashes($_POST["keyword"]);

$db= new mysqli($host, $username, $password, $database);

if(mysqli_connect_errno())
 die("Can't connect database : " . mysqli_connect_errno());

if(!$db->query("SET NAMES 'utf8'"))
 die(mysqli_error($db));

$query = <<< EOS
SELECT *
FROM {table}
WHERE name LIKE '%{$key}%'
AND kana LIKE '%{$key}%'
EOS;

if(!$result = $db->query($query))
die(mysqli_error($db));

色々と検証し、kanaのフィールドは問題なくnameのフィールドで
エラーが発生しているということが分かりました。また「LIKE '%{$key}'」は問題なく「LIKE '%{$key}'」の前方一致でエラーが起きているみたいです。

ちなみにREGEXPでも試してみたのですがダメみたいです。

対処法をご存知の方がいましたら、よろしくお願いいたします。

A 回答 (2件)

質問されてる事とエラーメッセージの辻褄がまったく合ってないですね。


エラーメッセージはSQL systaxに対することであり、
Queryを見る限り、私の環境Ver.5.0.75ではどんな値をいれてもマッチしなけば
"Empty"が返ってくるだけです。
検証はMysql server上でされたのですか?
たまたま検証中にsystaxが間違っており、それと今回に件を混同されている
ということではないですよね?
MysqlのVersionを表記されると何かでるかも知れません。
    • good
    • 0

最近はプリペアドステートメントを使うのが一般的でしょう。


また、なんとも言えませんが、とりあえずPOSTデータを洗浄する前に
文字コードを合わせる処理をいれてみてはどうでしょうか?
    • good
    • 0

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

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