Pokaždé, když zavoláte mysql_fetch_array vytáhne další řádek z vašeho dotazu. To while smyčka stále vrací true, zatímco mysql_fetch_array ještě zbývá něco přiřadit proměnné $row2 . Jakmile je mimo řádky, nemá co dát proměnnou a vrátí se false.
ETA: Pokud jde o poslední bit, který jste zmínil, můžete mít proměnný přírůstek v každé iteraci smyčky jako ve vašem příkladu, ale není to úplně nutné. Můžete také zjistit, kolik řádků bylo vráceno, když uděláte něco jako $var = mysql_num_rows($data) před vaším while smyčka.