Mai sentito parlare della funzione explode()?
Invece di scorrere ciascun record alla ricerca dei ; puoi utilizzarla per parserizzare il record utilizzando come delimitatore il simbolo ;

Riguardo alla tua domanda probabilmente lo script scoppia in qualche unto per cui non arriva mai all'istruzione echo successiva al while