Dit
...snip... ) LIKE '%' LOWER(:wildcard) '%' OR ...snip
is onjuist. Je hebt een string ('%' ) gevolgd door een functieaanroep (LOWER() ) gevolgd door nog een string, en ze zitten daar gewoon - geen verbindende logica, geen aaneenschakeling, blah blah blah.
Het zou moeten zijn
... LIKE CONCAT('%', LOWER(:wildcard), '%') OR ...
En standaard zijn mysql-vergelijkingen niet hoofdlettergevoelig, tenzij u een binary forceert vergelijking, of u gebruikt een hoofdlettergevoelige sortering op uw db/table.