Prueba esto
WHERE contact_first_name IN (".implode(', ', array_fill(0, count($search), '%s')).") OR contact_last_name IN (".implode(', ', array_fill(0, count($search), '%s')).")
ACTUALIZAR
La respuesta correcta a esta pregunta es La consulta es correcta, son los parámetros dinámicos incorrectos los que hacen que la sintaxis de la consulta sea incorrecta. En realidad, estaba en la sección de comentarios justo debajo de esta respuesta, ¡así que combínelo con las respuestas aceptadas!