Per quanto riguarda la sicurezza:

Io userei i prepared statement (magari passando a pdo) e lascerei perdere la funzione mysqli_real_escape_string che usi adesso, usarli entrambi secondo me è superfluo. I prepared statements invece ti danno una sicurezza ottima in quanto la query viene inviata al db quando viene "preparata" e da quel momento non è modificabile. Quindi inviare dati contenenti vettori di sql injection non servirà a nulla.

Per quanto riguarda la domanda sulla select:

puoi fare sql injection anche sulle select, quindi è necessario usare i prepared statement anche li.