fetch_fields
Erklärung der PHP-Funktion mysqli_fetch_fields(), die ein Array von Feldobjekten mit Metadaten zu den Spalten eines MySQLi-Ergebnisses liefert.
Die Funktion mysqli_fetch_fields() gibt ein Array von Objekten zurück, die die Spalten (Felder) eines MySQLi-Ergebnisses beschreiben — ihre Namen, Typen, Längen, Quelltabellen und Flags. Sie liest Metadaten über die Spalten, nicht die eigentlichen Zeilendaten. Diese Seite erläutert die Syntax, den Inhalt jedes Feldobjekts, wann man die Funktion einsetzt und häufige Fallstricke.
Syntax
mysqli_fetch_fields(mysqli_result $result): arrayIm objektorientierten Stil lautet derselbe Aufruf $result->fetch_fields().
$result— ein Ergebnisset, das vonmysqli_query(),mysqli_store_result()odermysqli_use_result()zurückgegeben wurde.- Rückgabewert — ein Array von
stdClass-Objekten, eines pro Spalte, in der Reihenfolge, in der die Spalten im Ergebnis erscheinen. Jedes Objekt stellt Eigenschaften wiename,orgname,table,orgtable,type,length,max_length,decimalsundflagsbereit.
Inhalt jedes Feldobjekts
| Eigenschaft | Beschreibung |
|---|---|
name | Der Spaltenname (oder sein Alias, wenn AS verwendet wurde). |
orgname | Der ursprüngliche Spaltenname ohne Alias. |
table | Der Tabellenname (oder sein Alias). |
orgtable | Der ursprüngliche Tabellenname. |
max_length | Die Breite des längsten Wertes im Ergebnis (wird nur nach mysqli_store_result() gesetzt). |
length | Die im Schema deklarierte Breite der Spalte. |
type | Ein ganzzahliger Typcode (siehe die MYSQLI_TYPE_*-Konstanten). |
decimals | Anzahl der Dezimalstellen bei numerischen Feldern. |
flags | Eine Bitmaske aus MYSQLI_*_FLAG-Flags wie NOT_NULL, PRI_KEY, AUTO_INCREMENT. |
Wann würde ich die Funktion verwenden?
Greifen Sie auf mysqli_fetch_fields() zurück, wenn Sie mit einem Abfrageergebnis generisch arbeiten müssen — ohne die Spalten vorab zu kennen. Typische Anwendungsfälle:
- Aufbau eines Admin-/Datenrasters, das jede
SELECT *-Abfrage rendert und Spaltennamen als Tabellenüberschriften verwendet. - Export von Ergebnissen in CSV mit einer Kopfzeile.
- Prüfen, ob eine Spalte ein Primärschlüssel oder Auto-Increment ist, bevor ein Bearbeitungsformular generiert wird.
Wenn Sie nur die Namen der Spalten benötigen, ist dies der direkteste Weg, sie zu ermitteln. Um die Beschreibung eines einzelnen Feldes abzurufen, verwenden Sie stattdessen mysqli_fetch_field(), und um die Spalten zu zählen, nutzen Sie mysqli_field_count().
Beispiel: Alle Spalten eines Ergebnissets auflisten
<?php
$mysqli = mysqli_connect("localhost", "user", "password", "shop");
$result = mysqli_query($mysqli, "SELECT id, name, price FROM products");
$fields = mysqli_fetch_fields($result);
foreach ($fields as $field) {
printf("Name: %s, Type: %d, Length: %d\n",
$field->name, $field->type, $field->length);
}
mysqli_free_result($result);
mysqli_close($mysqli);
?>Die foreach-Schleife durchläuft das Array der Feldobjekte und gibt den Namen, den Typcode und die definierte Länge jeder Spalte aus. Für die drei ausgewählten Spalten sieht die Ausgabe folgendermaßen aus:
Name: id, Type: 3, Length: 11
Name: name, Type: 253, Length: 255
Name: price, Type: 246, Length: 10Die numerischen type-Werte stammen aus den MYSQLI_TYPE_*-Konstanten — zum Beispiel ist 3 gleich MYSQLI_TYPE_LONG (ein INT) und 253 gleich MYSQLI_TYPE_VAR_STRING (ein VARCHAR).
CSV-Kopfzeile aus den Feldnamen erstellen
Da das Feld-Array generisch ist, können Sie für jede Abfrage eine Kopfzeile erstellen, ohne Spaltennamen fest zu kodieren:
<?php
$result = mysqli_query($mysqli, "SELECT * FROM products");
$header = array_map(
fn($field) => $field->name,
mysqli_fetch_fields($result)
);
echo implode(",", $header), "\n"; // id,name,pricearray_map() wandelt das Array von Feldobjekten in ein einfaches array von Namen um, und implode() verbindet sie mit Kommas.
Fallstricke
mysqli_fetch_fields()liefert nur Metadaten. Sie bewegt den Zeilencursor nicht und gibt keine Zeilendaten zurück — kombinieren Sie sie mitmysqli_fetch_assoc()odermysqli_fetch_array(), um die eigentlichen Zeilen zu lesen.max_lengthist0bei ungepufferten Ergebnissen. Der Wert wird nur gesetzt, wenn das vollständige Ergebnisset übermysqli_store_result()auf dem Client gepuffert wurde (wasmysqli_query()standardmäßig verwendet). Beimysqli_use_result()bleibt der Wert0.typeundflagssind ganze Zahlen, keine Strings. Vergleichen Sie sie mit den KonstantenMYSQLI_TYPE_*undMYSQLI_*_FLAGstatt mit magischen Zahlen, damit die Absicht klar bleibt.- Prüfen Sie immer, ob
$resulttruthy ist, bevor Sie die Funktion aufrufen — eine fehlgeschlagene Abfrage gibtfalsezurück, und das Übergeben vonfalselöst einen Fehler aus.
Verwandte Funktionen
mysqli_fetch_field()— Metadaten einer Spalte nach der anderen abrufen.mysqli_field_count()— die Anzahl der Spalten im Ergebnis ermitteln.mysqli_field_seek()— den Feldcursor auf eine bestimmte Spalte setzen.mysqli_fetch_assoc()— Ergebniszeilen als assoziative Arrays lesen.