Varje gång du anropar mysql_fetch_array
den hämtar nästa rad från din fråga. Det while
loop fortsätter att returnera true medan mysql_fetch_array
har fortfarande något kvar att tilldela variabeln $row2
. När den väl är utanför raderna har den inget kvar att ge variabeln, och false returneras.
ETA: Angående den sista biten du nämnde, kan du ha ett variabelt inkrement i varje iteration av loopen som i ditt exempel, men det är inte helt nödvändigt. Du kan också bara se hur många rader som har returnerats genom att göra något som $var = mysql_num_rows($data)
före din while
loop.