Chaque fois que vous appelez mysql_fetch_array
il extrait la ligne suivante de votre requête. Ce while
boucle continue de retourner vrai tandis que le mysql_fetch_array
il reste encore quelque chose à affecter à la variable $row2
. Une fois qu'il n'y a plus de lignes, il n'y a plus rien à donner à la variable, et false est renvoyé.
ETA : Concernant le dernier bit que vous avez mentionné, vous pouvez avoir un incrément variable à chaque itération de la boucle comme dans votre exemple, mais ce n'est pas tout à fait nécessaire. Vous pouvez également voir combien de lignes ont été renvoyées en faisant quelque chose comme $var = mysql_num_rows($data)
avant votre while
boucle.