Start · Sprachen · PHP · Referenz · mysqli_fetch_field

mysqli_fetch_field

Funktion

Gibt die Metadaten der nächsten Spalte einer Ergebnismenge als Objekt zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_fetch_field(mysqli_result $result): object|false

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

Typ
object|false
Beschreibung
Gibt ein Objekt mit den Metadaten der nächsten Spalte zurück. Sind keine weiteren Spalten vorhanden, wird 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();
Spaltenname: id Originaler Name: id Tabellenname: benutzer Typ (Integer): 3 Maximale Länge: 1 ---------------------------------------- Spaltenname: vn Originaler Name: vorname Tabellenname: benutzer Typ (Integer): 253 Maximale Länge: 5 ---------------------------------------- Spaltenname: nachname Originaler Name: nachname Tabellenname: benutzer Typ (Integer): 253 Maximale Länge: 8 ----------------------------------------

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);
Spalte 2: email Das Feld darf nicht NULL sein.

// 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.