Всеки път, когато извикате mysql_fetch_array той изтегля следващия ред от вашата заявка. Това while цикълът продължава да връща true, докато mysql_fetch_array все още има нещо за присвояване на променливата $row2 . След като е извън редовете, няма какво да даде на променливата и се връща false.
ЕТА: По отношение на последния бит, който споменахте, можете да имате променливо увеличение във всяка итерация на цикъла, както във вашия пример, но това не е напълно необходимо. Можете също така просто да видите колко реда са върнати, като направите нещо като $var = mysql_num_rows($data) преди вашето while цикъл.