De acordo com Stefan Esser, "
mysql_real_escape_string() [é] não seguro quando SET NAMES é usado." Sua explicação, de seu blog :
SET NAMES é geralmente usado para mudar a codificação do que é padrão para o que o aplicativo precisa. Isso é feito de uma forma quemysql_real_escape_stringnão sabe disso. Isso significa que se você mudar para alguma codificação multi byte que permita a barra invertida como 2º 3º 4º byte, você terá problemas, porquemysql_real_escape_stringnão escapa corretamente. UTF-8 é seguro…
A maneira segura de alterar a codificação émysql_set_charset, mas isso só está disponível em novas versões do PHP
Ele menciona que o UTF-8 é seguro, no entanto.