Dette
...snip... ) LIKE '%' LOWER(:wildcard) '%' OR ...snip
er forkert. Du har en streng ('%' ) efterfulgt af et funktionskald (LOWER() ) efterfulgt af en anden streng, og de sidder bare der - ingen forbindelseslogik, ingen sammenkædning, bla bla bla .
Det burde være
... LIKE CONCAT('%', LOWER(:wildcard), '%') OR ...
Og som standard ER mysql-sammenligninger ufølsomme mellem store og små bogstaver, medmindre du tvinger en binary sammenligning, eller du bruger en versalfølsom sortering på din db/tabel.