Declarações preparadas não escapam a nada. Quando você prepara uma instrução, sua consulta é pré-compilada, para que ela precise apenas dos espaços reservados (
?
) a ser preenchido. Como não há como alterar o SQL da consulta pré-compilada, nenhum escape é necessário. Para corrigir isso, escape
%
e _
manualmente. Adicionado:
Um pouco de raciocínio de bom senso:no seu caso, quando um usuário insere
%
em uma caixa de pesquisa, seu $search
variável contém a string %%%
. Como o MySQL saberia, qual %
deve escapar, e qual deve deixar em paz?