A parte il caso in cui tu ti ritrovi a scrivere un tool simile a phpmyadmin, nel 99% dei casi la necessita' di nomi dinamici delle tabelle e' un errore di progettazione. Supponendo comunque di trovarci nel 1% in cui sia una caratteristica legittima, la cosa si risolve con una semplicissima whitelist, perche' la regola e' sempre quella: nessun dato fornito dall'utente deve andare nella stringa che compone una query. Se ti attieni a questa regola, non avrai MAI problemi di SQL injection.
Accettare una mail di quel tipo di per se' non pone nessun problema di sicurezza, ma comunque si puo' sempre fare il controllo sulla presenza di UN UNICO carattere "@", che peraltro e' l'unico check che ha senso fare su un indirizzo email
Se fai questo l'unica cosa che ottieni e' dei dati corrotti rispetto all'originale, e' un po' come dire "visto che non voglio che mi rubino la macchina le do' fuoco cosi' risolvo il problema".
La cosa migliore da fare e' salvare l'input cosi' com'e', e gestirlo poi a seconda dei casi. Modificare l'input e' il peggior modo di approcciare il discorso sicurezza.
Ti faccio un esempio: stai creando un'applicazione che permette agli utenti di postare messaggi con una firma. In base alle tue regole di sicurezza, quando l'utente inserisce una firma con codice HTML tu purghi via tutto e lasci solo plain text. Un giorno decidi che vuoi dare agli utenti le firme piu' fighe e attivi l'HTML, nel frattempo pero' per quelli che l'avevano gia' messa l'HTML e' andato e non lo puoi recuperare.
Viceversa se tu ti salvi le cose come sono, hai tutti i dati nel database. Quando stampi la firma puoi tranquillamente usare strip_tags() o qualsiasi altra funzione per ottenere lo stesso risultato della tua purga, ma i dati ti rimangono dovessero mai servirti.
Stessa cosa per quello che vedo molto spesso menzionato su questo forum, e cioe' usare htmlspecialchars() o htmlentities() come forma di escaping o perche' non sanno gestire le vocali accentate. E' una cosa estremamente stupida, intanto perche' quelle funzioni NON SONO funzioni di escaping ne' alternative a utf8 ma hanno uno scopo ben preciso, e poi perche' se quei dati li vuoi usare al di fuori di una pagina HTML (in una newsletter, in un file di log, etc) tutti i codici HTML non hanno alcun senso e non fanno altro che corrompere i dati.