Las declaraciones preparadas no escapan a nada. Cuando prepara una declaración, su consulta se precompila, por lo que solo necesita los marcadores de posición ( ?
) para completar. Dado que no hay forma de cambiar el SQL de la consulta precompilada, no es necesario escapar.
Para arreglar esto, escape %
y _
manualmente.
Añadido:
Un poco de razonamiento de sentido común:en su caso, cuando un usuario ingresa %
en un cuadro de búsqueda, su $search
la variable contiene la cadena %%%
. ¿Cómo sabría MySQL, qué %
debe escapar y cuáles debe dejar en paz?