Signatur
Beschreibung
mysqli_fetch_field() liest die Metadaten der jeweils nächsten Spalte (Feld) aus einer mysqli_result-Ergebnismenge und gibt sie als Objekt zurück. Jeder Aufruf rückt den internen Zeigers um eine Position weiter, so dass durch wiederholtes Aufrufen alle Spalten der Abfrage nacheinander ausgelesen werden können.
Das zurückgegebene Objekt enthält zahlreiche Eigenschaften wie name (Spaltenname), orgname (originaler Spaltenname vor einem Alias), table (Tabellenname), orgtable, def (Standardwert), db (Datenbankname), max_length (maximale Länge im Ergebnis), length (deklarierte Feldlänge), charsetnr (Zeichensatz-Nummer), flags (Bit-Flags) sowie type (Spaltentyp als Integer) und decimals (Anzahl der Dezimalstellen).
Die Funktion ist besonders nützlich, wenn man zur Laufzeit Informationen über die Struktur einer Ergebnismenge benötigt, z. B. um dynamisch Tabellen zu rendern oder Spaltentypen für die Weiterverarbeitung zu prüfen. Mit mysqli_field_seek() lässt sich der interne Zeiger zurücksetzen oder auf eine bestimmte Position springen.
In der objektorientierten Variante steht die Methode mysqli_result::fetch_field() zur Verfügung und verhält sich identisch.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Das mysqli_result-Objekt, das von Funktionen wie mysqli_query(), mysqli_store_result() oder mysqli_use_result() zurückgegeben wurde. |
Rückgabewert
false zurückgegeben. Das Objekt enthält u. a. die Eigenschaften name, orgname, table, orgtable, def, db, max_length, length, charsetnr, flags, type und decimals.Beispiele
Alle Spalten-Metadaten einer Ergebnismenge ausgeben
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SELECT id, vorname AS vn, nachname FROM benutzer LIMIT 1');
if (!$result) {
die('Abfragefehler: ' . $mysqli->error);
}
while ($field = mysqli_fetch_field($result)) {
echo 'Spaltenname: ' . $field->name . PHP_EOL;
echo 'Originaler Name: ' . $field->orgname . PHP_EOL;
echo 'Tabellenname: ' . $field->table . PHP_EOL;
echo 'Typ (Integer): ' . $field->type . PHP_EOL;
echo 'Maximale Länge: ' . $field->max_length . PHP_EOL;
echo str_repeat('-', 40) . PHP_EOL;
}
$result->free();
$mysqli->close();
Spaltenzeiger zurücksetzen und gezielt auf eine Spalte springen
<?php
$mysqli = mysqli_connect('localhost', 'user', 'password', 'testdb');
$result = mysqli_query($mysqli, 'SELECT id, email, created_at FROM benutzer LIMIT 5');
// Zeiger auf die zweite Spalte (Index 1) setzen
mysqli_field_seek($result, 1);
$field = mysqli_fetch_field($result);
echo 'Spalte 2: ' . $field->name . PHP_EOL; // email
// Flags-Bitmuster prüfen (z. B. NOT_NULL_FLAG = 1)
if ($field->flags & MYSQLI_NOT_NULL_FLAG) {
echo 'Das Feld darf nicht NULL sein.' . PHP_EOL;
}
mysqli_free_result($result);
mysqli_close($mysqli);
// Wichtig · Fallstricke
Typ-Konstanten: Der Wert von type ist ein Integer. PHP stellt dafür Konstanten bereit, z. B. MYSQLI_TYPE_LONG (= 3 für INT), MYSQLI_TYPE_VAR_STRING (= 253 für VARCHAR) usw. Ein Vergleich mit diesen Konstanten macht den Code lesbarer.
Flags-Konstanten: Die Eigenschaft flags ist ein Bit-Feld. Vordefinierte Konstanten wie MYSQLI_NOT_NULL_FLAG, MYSQLI_PRI_KEY_FLAG, MYSQLI_AUTO_INCREMENT_FLAG u. v. m. ermöglichen eine komfortable Prüfung via bitweisem UND (&).
max_length: Der Wert von max_length spiegelt die tatsächlich längste zurückgegebene Zeichenkette im aktuellen Ergebnis wider und kann daher bei mysqli_use_result() (unbuffered) immer 0 sein.
OOP-Äquivalent: $result->fetch_field() ist identisch und wird für modernen Code empfohlen.