Ciao,
mysql_real_escape_string esegue l'escape degli apici sia singoli che doppi,
htmlspecialchars converte i caratteri :
'&' (e commerciale)
'"' (doppio apice)
''' (singolo apice)
'<' (minore)
'>' (maggiore)
in entità Html.
Alla luce di quanto detto, per inserire i dati in una tabella di un database, non occorre la conversione dei caratteri in entità, ma basta l'escape.
L'escape è necessaria (ma non sufficiente), per motivi di sicurezza e per essere sicuri che gli apici non creino problemi (tipo chiusura in anticipo dell'SQL).
La conversione dei caratterti in entità va fatta nel momento in cui si vogliono stampare i dati nella pagina html.