• ベストアンサー

LIkEで漢字一文字検索でエラー

お世話になります。 現在、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でも試してみたのですがダメみたいです。 対処法をご存知の方がいましたら、よろしくお願いいたします。

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

  • ベストアンサー
  • mimzy
  • ベストアンサー率33% (32/96)
回答No.2

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

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

最近はプリペアドステートメントを使うのが一般的でしょう。 また、なんとも言えませんが、とりあえずPOSTデータを洗浄する前に 文字コードを合わせる処理をいれてみてはどうでしょうか?

関連するQ&A