Cita: Una pregunta al respecto, cuando haces un mysql_real_escape_string, el resultado lo guardás en una variable y luego hacés la query ??
Correcto, y en
cualquier query que se vaya hacer a la base de datos hay que usarlo.
htmlspecialchars transforma todo los caracteres que son propios del html y los convierte en su version html; o sea que el usuario ve lo mismo que escribio pero no ejecuta, por ejemplo si en la base de datos esta
<script>window.document.href = 'http://virusX.tk'</script> eso es exactamente lo que vera el usuario, mas no se ejecuta, ya que el codigo, solo quedaria
<script>window.document.href = 'http://virusX.tk'</script> ;
htmlspecialchars tiene un segundo parametro para especificar si incluir o no las comillas doble en los caracteres a remplazar y un tercer parametro para seleccionar en que codificacion quiere el resultado (por defecto es ISO-8859-1 que usualmente sirve perfectamente)
En la pagina oficial de php puede ver mas
info al respecto de esta funcion.