За да коригирате грешката, която получавате, mysql_real_escape_string()
изисква отворена връзка чрез mysql_connect() . Тъй като нямате такъв, той се опитва да се свърже и не успява (използвайки потребителско име от matthew , докато вашето PDO се свързва с root ). Освен това не можете (или не трябва ) смесете и съчетайте mysql_real_escape_string() и PDO - това са различни библиотеки.
По отношение на „кога“ да се използват подготвени изрази, общото правило е, когато стойностите не са твърдо кодирани. Вашият пример за LIKE '%hotmail%' не е необходимо да се подготвя, той е твърдо кодиран и никога няма да се промени (освен ако не го актуализирате ръчно, разбира се).
Ако имате заявка, която ще приеме променлива от всякакъв вид, било то данни от $_POST или $_GET , или променлива, която програмист е направил 10 реда преди заявката, трябва да използвате подготвен израз (или поне да го избегнете, вижте PDO::quote
).