Secondo me ci sono un sacco di righe inutili... il ciclo for per esempio a cosa serve?
All'interno del primo while hai il nome della tabella. A quel punto perché non fai subito DESCRIBE?
Nel ciclo riempi un array con i nomi dei campi e stampi la prima riga. Stop.
Poi fai il SELECT della tabella fuori da ciclo del DESCRIBE, usi l'array per chiamare i vari campi e stampi una riga dopo l'altra.