Si haces:
$row=mysql_fetch_array($query);
Haces que $row sea un array que contiene los valores del registro de la base de datos que toque.
Ejemplo:
mysql_query("SELECT 4");
$row=mysql_fetch_array($query);
#$row[0] = 4;
¿Que pasa? que sólo muestras un registro. Si usas el while(), creas un bucle que irá devolviendo registros hasta que se acaben. Es algo así como un foreach para mysql_query