Ini
...snip... ) LIKE '%' LOWER(:wildcard) '%' OR ...snip
tidak benar. Anda memiliki string ('%' ) diikuti oleh panggilan fungsi (LOWER() ) diikuti oleh string lain, dan mereka hanya duduk di sana - tidak ada logika penghubung, tidak ada penggabungan, bla bla bla .
Seharusnya
... LIKE CONCAT('%', LOWER(:wildcard), '%') OR ...
Dan secara default, perbandingan mysql TIDAK peka huruf besar/kecil, kecuali jika Anda memaksa binary perbandingan, atau Anda menggunakan susunan peka huruf besar/kecil pada db/tabel Anda.