Ogni volta che chiami mysql_fetch_array
estrae la riga successiva dalla tua query. Quel while
loop continua a restituire true mentre mysql_fetch_array
ha ancora qualcosa da assegnare alla variabile $row2
. Una volta esaurite le righe, non rimane più nulla da fornire alla variabile e viene restituito false.
ETA: Per quanto riguarda l'ultimo bit che hai menzionato, puoi avere un incremento variabile in ogni iterazione del ciclo come nel tuo esempio, ma non è del tutto necessario. Puoi anche vedere quante righe sono state restituite facendo qualcosa come $var = mysql_num_rows($data)
prima del tuo while
ciclo.