Vorbereitete Statements entgehen nichts. Wenn Sie eine Anweisung vorbereiten, wird Ihre Abfrage vorkompiliert, sodass sie nur die Platzhalter benötigt ( ? ) auszufüllen. Da es keine Möglichkeit gibt, die SQL einer vorkompilierten Abfrage zu ändern, ist kein Escapezeichen erforderlich.
Um dies zu beheben, maskieren Sie % und _ manuell.
Hinzugefügt:
Ein bisschen gesunder Menschenverstand:In Ihrem Fall, wenn ein Benutzer % eingibt in ein Suchfeld, Ihre $search Variable enthält Zeichenfolge %%% . Woher soll MySQL wissen, welcher % es entkommen soll, und was es in Ruhe lassen soll?