Sven Rautenberg: mysql_query --> list()=each() : Was mach ich falsch

Beitrag lesen

Aloha!

$typtxt = (mysql_query("select * from pk_types where id = '$at_typ'"));

/*ZEILE 61*/ while(list($id, $typ) = each(mysql_fetch_row($typtxt)))
{
   print("Typ der Attacke: $typ");
}

Warum denn so kompliziert? mysql_fetch_array() verwenden hilft:

while ($attacke = mysql_fetch_array($typtxt))
{
  print ("Typ der Attacke: ".$attacke['typ'];
}

Die Funktion mysql_fetch_array gibt dir einen Hash. Die Schlüssel entsprechen den Spalten deiner Datenbanktabelle (obiges Beispiel setzt also voraus, daß der Typ der Attacke in der Spalte 'typ' steht).

Die Funktion gibt false zurück, wenn keine weitere Zeile mehr vorliegt, und bricht damit die while-Schleife ab.

Außerdem entgehst du damit einer weiteren Falle, die du - vermutlich ohne es zu wissen - eingebaut hast: Solltest du deine Datenbanktabelle jemals um eine Spalte erweitern bzw. sollte sich die Reihenfolge der Spalten in der Datenbank durch irgendeinen dummen Zufall mal ändern, hättest du ein Problem mit _deinem_ Code. Du selektierst alle Spalten (SELECT * ist böse), auch die, von denen du heute noch nicht weißt, daß es sie vielleicht geben wird, und du gibst durch das Sternchen auch keine Reihenfolge vor. Du vertraust aber blind darauf, daß mysql_fetch_row dir genau _zwei_ Spaltenergebnisse in der von dir gewünschten Reihenfolge liefert.

mysql_fetch_array hat diese Probleme alle nicht. Du hast zwar den Nachteil, daß du die Hash-Variable nicht direkt in Stringausgaben einbauen kannst, aber das ist wirklich Gewöhnungssache.

- Sven Rautenberg