En realidad es un error de programación, o mejor dicho, una mala praxis. Cuando haces una consulta en SQL has de saber que campos consultas y por lo tanto sabes la cantidad. Lo que puedes desconocer es la cantidad de filas que te devolverá la consulta pero no la cantidad de columnas. Partiendo de eso, siempre vas a saber el tamaño de "row" y el valor máximo que poner en el for.
Si igualmente quieres seguir usando una "select *" (no te lo aconsejo ...) tendrías que usar la funcion
mysql_num_fields de PHP.