Подготвените изявления не убягват от нищо. Когато подготвяте изявление, вашата заявка се компилира предварително, така че се нуждае само от заместителите ( ? ) да се попълни. Тъй като няма начин да се промени SQL на предварително компилираната заявка, не е необходимо екраниране.
За да коригирате това, избягайте от % и _ ръчно.
Добавено:
Малко разумни разсъждения:Във вашия случай, когато потребител въведе % в поле за търсене, вашето $search променливата съдържа низ %%% . Откъде MySQL знае кой % трябва да избяга и кое да остави на мира?