der grund für den unterschied ist relativ leicht erklärt, wobei der code den du oben erwähnt hast als erstes überhaupt nicht funktionieren dürfte, siondern einen fehlermeldung derart "undefined index 1 in xxx" liefern sollte.
die funktion mysql_fetch_row liefert ein array zurück, das aus den feldern eines datensatzes besteht und setzt gleichzeitig den internen pointer auf den nächsten datensatz. wenn du den datensatz zurückgeben willst mußt du nun entweder genau den feldindex angeben:
$wert[0] $wert[1], oder du mußt das array durchlaufen lassen foreach($wert as $value)
dies gilt allerdings imme rnur für den durch mysql_fetch_row zurückgelieferten datensatz. wenn du nun alle durchlaufen lassen willst brauchst du noch eine iteration durch alle im ergebnisbezeichner enthaltenen verweise auf gefundene datensätze (der ergebnisbezeichner ist $result=mysql_query();)
dies geht entweder über eine for-schleife, indem du vorher die anzahl der datensätze ausliest mit: $count=mysql_num_rows(); und dies als obergrenze für die iteration nimmst, oder eben einfacher mit einer while schleife.
als kurze erklärung wie eine schleife arbeitet.
schleifenbefehl(argument){funktionen}
die schleife wird solange ausgeführt, wie argument true ist.
mysql:_fetch_row setzt nach dem auslesen eines eintrages den pointer auf den nächsten datensatz und liefert true zurück, bei dem nächsten durchlauf wird der datensatz zurückgegeben an dem der pointer steht. ist der letzte datensatz gelesen und steht der pointer am ende, so wird beim nächsten durchlauf false zurückgeliefert und die iteration ist beendet.
somit wirkt die schleife folgendermaßen:
while(datensatz als array auslesen und pointer höher setzen){
geliefertes array durchlaufen und werte darstellen
}
wenn ich also nicht den gesamten ergebnisbezeichner $result durchlaufe wird mir mit mysql_fetch_row immer nur ein datensatz geliefert.