Prova questo
WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).") OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")
AGGIORNAMENTO
La risposta corretta a questa domanda è La query è corretta, sono i parametri dinamici errati che causano l'errata sintassi della query. In realtà era nella sezione commenti proprio sotto questa risposta, quindi l'ho unito alle risposte accettate!