Согласно руководству по PHP:
1) break ends execution of the current for, foreach, while, do-while or switch structure
2) break accepts an optional numeric argument which tells it
how many (the above mentioned) nested enclosing structures are to be broken out of
Ваш перерыв на уровне 2, и, следовательно, break 2;
должен работать, как и ожидалось, поэтому проблема в другом месте. break 2
выполняется вообще?
В любом случае, я бы порекомендовал более надежное решение, например,
$ok = True;
while (($row = mysql_fetch_array($result)) && $ok) {
...
if (...) $ok = False; // anywhere deep
...
if ($ok) {...}
}