Según Stefan Esser, "mysql_real_escape_string() [no] es seguro cuando SET NAMES se utiliza."
Su explicación, de su blog :
SET NAMES generalmente se usa para cambiar la codificación de lo que es predeterminado a lo que necesita la aplicación. Esto se hace de una manera que mysql_real_escape_string no sabe de esto. Esto significa que si cambia a una codificación de varios bytes que permite una barra invertida como 2.º 3.º 4.º… byte, tendrá problemas, porque mysql_real_escape_string no escapa correctamente. UTF-8 es seguro...
La forma segura de cambiar la codificación es mysql_set_charset , pero eso solo está disponible en las nuevas versiones de PHP
Sin embargo, menciona que UTF-8 es seguro.