Za każdym razem, gdy dzwonisz do mysql_fetch_array pobiera następny wiersz z zapytania. To while pętla zwraca true, podczas gdy mysql_fetch_array wciąż ma coś do przypisania do zmiennej $row2 . Po wyczerpaniu wierszy nie ma już nic do przekazania zmiennej i zwracana jest wartość false.
ETAP: Jeśli chodzi o ostatni fragment, o którym wspomniałeś, możesz mieć zmienną inkrementację w każdej iteracji pętli, tak jak w twoim przykładzie, ale nie jest to całkowicie konieczne. Możesz również zobaczyć, ile wierszy zostało zwróconych, wykonując coś takiego jak $var = mysql_num_rows($data) przed twoim while pętla.