Voorbereide verklaringen ontsnappen aan niets. Wanneer u een instructie voorbereidt, wordt uw query vooraf gecompileerd, zodat deze alleen de tijdelijke aanduidingen nodig heeft ( ? ) in te vullen. Aangezien er geen manier is om de SQL van de voorgecompileerde query te wijzigen, is er geen escape nodig.
Om dit op te lossen, escape % en _ handmatig.
Toegevoegd:
Een beetje gezond verstand redenering:in jouw geval, wanneer een gebruiker % . invoert in een zoekvak, uw $search variabele bevat string %%% . Hoe zou MySQL weten, welke % het moet ontsnappen en wat het met rust moet laten?