- ベストアンサー
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でも試してみたのですがダメみたいです。 対処法をご存知の方がいましたら、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
質問されてる事とエラーメッセージの辻褄がまったく合ってないですね。 エラーメッセージはSQL systaxに対することであり、 Queryを見る限り、私の環境Ver.5.0.75ではどんな値をいれてもマッチしなけば "Empty"が返ってくるだけです。 検証はMysql server上でされたのですか? たまたま検証中にsystaxが間違っており、それと今回に件を混同されている ということではないですよね? MysqlのVersionを表記されると何かでるかも知れません。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
最近はプリペアドステートメントを使うのが一般的でしょう。 また、なんとも言えませんが、とりあえずPOSTデータを洗浄する前に 文字コードを合わせる処理をいれてみてはどうでしょうか?