Bueno, veo que para dividir en palabras el texto lo partes por ' '. Entonces un texto como 'Hola. ¿Como estas?' se divide en tres 'palabras': 'Hola.' '¿Como' y 'estas?'. Y si buscas 'Hola', no obtendras ninguna coincidencia, ya que 'Hola'!='Hola.'. Asi que creo que tu forma de calcular las palabras del texto no es del todo correcta. Ademas, tu algoritmo no corresponde a la consulta SQL que has puesto, ya que con esa consulta si buscas 'ola' en el texto de ejemplo, da coincidencia en 'Hola'. Y en tu algoritmo debe ser exacta.
Si tu version de PHP es la 4.3 o superior, puedes probar str_word_count() (
www.php.net/str_word_count) o mirar alguna de las soluciones que ponen en los comentarios de los usuarios. Esto para crear el array de las palabras.
Saludos.