MySQL - Struktur lesen
-
Wie liest man aus einer beliebigen Tabelle die Struktur?
$mysqlres=mysql_query('SELECT * FROM blabla'); if(mysql_num_rows($mysqlres)) { while($zeile=mysql_fetch_assoc($mysqlres)) { var_dump($zeile); } }
sprich: Struktur = mit welchem Index muss ich auf $zeile zugreifen um den Inhalt zu bekommen?
mfg (c)h
-
Da du den Inhalt der Tabelle mit mysql_fetch_assoc() abfragst, bekommst du ein rein-assoziatives Array! Du musst das Array in diesem Fall über den Namen der Spalte in der Tabelle ansprechen.
Wenn du ein Array haben willst, dass du per nummerischen Index ansprechen kannst, dann verwende mysql_fetch_row() (dann musst du das Array mit der Spaltennummer ansprechen, gezählt von links nach rechts) oder mysql_fetch_array(). Bei letzterem hast du beides, daher würde ich eher mysql_fetch_row() verwenden, aus performance-gründen.
Wenn du's gerne objektorientiert haben möchtest, kannst du auch mysql_fetch_object() verwenden, allerdings ist dass in den meisten Fällen imho nicht nötig!
-
Reyx schrieb:
Bei letzterem hast du beides, daher würde ich eher mysql_fetch_row() verwenden, aus performance-gründen.
Der Geschwindigkeitsverlust, der von der Funktion mysql_fetch_assoc wegen der extra Aufbereitungsarbeit verursacht wird, sollte ziemlich minimal sein. Man muss sich diesbezüglich den Vorteil von assoziativen Arrays gegenüber numerisch-indizierten Arrays vor Augen halten, nämlich:
.) Der Code ist viel lesbarer. Beispiel:
echo "<a href=\"mailto:{$zeile['user_mail']}\">{$zeile['user_name']}</a>"; //versus echo "<a href=\"mailto:{$zeile[0]}\">{$zeile[1]}</a>";
.) Man ist nicht an die Reihenfolge gebunden, in der die Spalten in der SQL-Query aufgeführt wurden. Eine Änderung dieser Auflistung in der Query oder in der Tabellenstruktur, entweder durch Neuanordnung/Löschung einer Spalte oder Hinzufügen einer neuen Spalte, hätte zur Folge, dass man alle numerischen Indices im Code aktualisieren müsste -> unter Umständen kann das ein riesiger Aufwand sein.
-
Reyx schrieb:
Wenn du's gerne objektorientiert haben möchtest, kannst du auch mysql_fetch_object() verwenden, allerdings ist dass in den meisten Fällen imho nicht nötig!
Objektorientiert != es gibt ein Objekt
was *_assoc betrifft. das boese hier ist *_array ob _assoc oder _row ist egal, lediglich _array ist boese (weil doppelter speicherverbrauch)
-
Shade Of Mine schrieb:
Objektorientiert != es gibt ein Objekt
Mag sein, aber das Handling mit dem Objekt macht die ganze Sache imho zu einer objektorientierten... auch wenn hier kein großer Vorteil daraus entsteht...