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