Secondo Stefan Esser, "mysql_real_escape_string() [è] non sicuro quando SET NAMES viene utilizzato."
La sua spiegazione, dal suo blog :
SET NAMES viene solitamente utilizzato per cambiare la codifica da ciò che è predefinito a ciò di cui l'applicazione ha bisogno. Questo viene fatto in un modo che mysql_real_escape_string non lo sa. Ciò significa che se si passa a una codifica multi-byte che consente la barra rovesciata come 2° 3° 4°... byte si incontrano problemi, perché mysql_real_escape_string non esce correttamente. UTF-8 è sicuro...
Un modo sicuro per cambiare la codifica è mysql_set_charset , ma è disponibile solo nelle nuove versioni di PHP
Tuttavia, afferma che UTF-8 è sicuro.