Para resolver o erro que você está recebendo,
mysql_real_escape_string()
requer uma conexão aberta via mysql_connect() . Como você não tem um, ele está tentando se conectar e falhando (usando um nome de usuário de matthew , enquanto seu PDO está se conectando com root ). Além disso, você não pode (ou não deve ) misturar e combinar mysql_real_escape_string() e PDO - são bibliotecas diferentes. Em relação a "quando" usar declarações preparadas, a regra geral é sempre que os valores não são codificados permanentemente. Seu exemplo de
LIKE '%hotmail%' não precisa ser preparado, é codificado e nunca vai mudar (a menos que você o atualize manualmente, é claro). Se você tiver uma consulta que receberá uma variável de qualquer tipo, seja dados de
$_POST ou $_GET , ou uma variável que um desenvolvedor fez 10 linhas antes da consulta, você deve usar uma declaração preparada (ou pelo menos escapar dela, confira PDO::quote
).