Probeer dit
WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).") OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")
UPDATE
Het juiste antwoord op deze vraag is De query is correct, het zijn de dynamische parameters die fout zijn die ervoor zorgen dat de syntaxis van de query verkeerd wordt. Het stond eigenlijk in het opmerkingengedeelte onder dit antwoord, dus samengevoegd met de geaccepteerde antwoorden!