プリペアドステートメントは何もエスケープしません。ステートメントを準備すると、クエリはプリコンパイルされるため、プレースホルダー(?
のみが必要です。 )入力する必要があります。プリコンパイルされたクエリのSQLを変更する方法がないため、エスケープする必要はありません。
これを修正するには、%
をエスケープします および_
手動で。
追加:
ちょっとした常識的な推論:あなたの場合、ユーザーが%
を入力したとき 検索ボックスに、$search
変数に文字列%%%
が含まれています 。 MySQLはどの%
をどのように知るのでしょうか それは逃げるべきであり、どちらを放っておくべきですか?