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.

Rispondi quotando
