W3docs

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): array

Im objektorientierten Stil lautet derselbe Aufruf $result->fetch_fields().

  • $result — ein Ergebnisset, das von mysqli_query(), mysqli_store_result() oder mysqli_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 wie name, orgname, table, orgtable, type, length, max_length, decimals und flags bereit.

Inhalt jedes Feldobjekts

EigenschaftBeschreibung
nameDer Spaltenname (oder sein Alias, wenn AS verwendet wurde).
orgnameDer ursprüngliche Spaltenname ohne Alias.
tableDer Tabellenname (oder sein Alias).
orgtableDer ursprüngliche Tabellenname.
max_lengthDie Breite des längsten Wertes im Ergebnis (wird nur nach mysqli_store_result() gesetzt).
lengthDie im Schema deklarierte Breite der Spalte.
typeEin ganzzahliger Typcode (siehe die MYSQLI_TYPE_*-Konstanten).
decimalsAnzahl der Dezimalstellen bei numerischen Feldern.
flagsEine 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: 10

Die 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,price

array_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 mit mysqli_fetch_assoc() oder mysqli_fetch_array(), um die eigentlichen Zeilen zu lesen.
  • max_length ist 0 bei ungepufferten Ergebnissen. Der Wert wird nur gesetzt, wenn das vollständige Ergebnisset über mysqli_store_result() auf dem Client gepuffert wurde (was mysqli_query() standardmäßig verwendet). Bei mysqli_use_result() bleibt der Wert 0.
  • type und flags sind ganze Zahlen, keine Strings. Vergleichen Sie sie mit den Konstanten MYSQLI_TYPE_* und MYSQLI_*_FLAG statt mit magischen Zahlen, damit die Absicht klar bleibt.
  • Prüfen Sie immer, ob $result truthy ist, bevor Sie die Funktion aufrufen — eine fehlgeschlagene Abfrage gibt false zurück, und das Übergeben von false löst einen Fehler aus.

Verwandte Funktionen

Übungen

Übung
Was kann mit der Funktion fetch_field() in PHP gemacht werden?
Was kann mit der Funktion fetch_field() in PHP gemacht werden?
Was this page helpful?