Signatur
Beschreibung
mysqli_fetch_field_direct() gibt ein Objekt zurück, das alle Metadaten einer bestimmten Spalte in einem MySQL-Abfrageergebnis enthält. Im Gegensatz zu mysqli_fetch_field(), das sequenziell durch alle Felder iteriert, kann hier eine Spalte gezielt über ihren nullbasierten Index $index angesprochen werden.
Das zurückgegebene Objekt enthält unter anderem folgende Eigenschaften: name (Spaltenname), orgname (originaler Spaltenname), table (Tabellenname), orgtable (originaler Tabellenname), def (Standardwert), db (Datenbankname), catalog, max_length (maximale Breite im Ergebnis), length (deklarierte Breite im Schema), charsetnr (Zeichensatz-Nummer), flags (Bit-Flags), type (MySQL-Datentyp) und decimals (Anzahl der Dezimalstellen).
Diese Funktion ist besonders nützlich, wenn dynamisch generierte Abfragen verarbeitet werden und zur Laufzeit bestimmte Spalteninformationen – z. B. der Typ oder die Flags – benötigt werden, ohne alle Felder iterieren zu müssen.
Die Funktion steht sowohl prozedural (mysqli_fetch_field_direct()) als auch objektorientiert ($result->fetch_field_direct()) zur Verfügung.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Ein mysqli_result-Objekt, das von mysqli_query(), mysqli_store_result() oder mysqli_use_result() zurückgegeben wurde. |
|
| $index Pflicht | int | Nullbasierter Index der Spalte, deren Metadaten abgerufen werden sollen. Muss im Bereich 0 bis mysqli_num_fields($result) - 1 liegen. |
Rückgabewert
false zurückgegeben.Beispiele
Spaltennamen und -typ einer bestimmten Spalte ausgeben
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SELECT id, username, email FROM users');
if ($result) {
// Metadaten der zweiten Spalte (Index 1 = username) abrufen
$fieldInfo = $result->fetch_field_direct(1);
if ($fieldInfo) {
echo 'Spaltenname: ' . $fieldInfo->name . PHP_EOL;
echo 'Tabelle: ' . $fieldInfo->table . PHP_EOL;
echo 'Typ (int): ' . $fieldInfo->type . PHP_EOL;
echo 'Länge: ' . $fieldInfo->length . PHP_EOL;
}
$result->free();
}
$mysqli->close();
Alle Spalten-Metadaten einer Abfrage tabellarisch ausgeben
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$result = $mysqli->query('SELECT id, username, created_at FROM users LIMIT 1');
if ($result) {
$numFields = $result->field_count;
echo sprintf("%-15s %-15s %-6s %-8s\n", 'Spalte', 'Tabelle', 'Typ', 'Länge');
echo str_repeat('-', 50) . PHP_EOL;
for ($i = 0; $i < $numFields; $i++) {
$field = $result->fetch_field_direct($i);
echo sprintf(
"%-15s %-15s %-6d %-8d\n",
$field->name,
$field->table,
$field->type,
$field->length
);
}
$result->free();
}
$mysqli->close();
// Wichtig · Fallstricke
Typ-Konstanten: Der Wert in $field->type ist eine Integer-Zahl, die dem MySQL-Feldtyp entspricht. Mit MYSQLI_TYPE_*-Konstanten (z. B. MYSQLI_TYPE_STRING, MYSQLI_TYPE_LONG) lässt sich der Typ lesbarer prüfen. Eine vollständige Liste der Typ-Konstanten findet sich in der PHP-Dokumentation.
Flags: Die Eigenschaft flags ist eine Bitmaske. Mit MYSQLI_PRI_KEY_FLAG, MYSQLI_NOT_NULL_FLAG usw. können einzelne Eigenschaften geprüft werden: if ($field->flags & MYSQLI_NOT_NULL_FLAG) { ... }
max_length vs. length: length beschreibt die im Schema definierte maximale Feldbreite, während max_length nur bei gepufferten Ergebnissen (mysqli_store_result()) die tatsächliche maximale Breite der zurückgegebenen Daten enthält. Bei ungepufferten Ergebnissen ist max_length immer 0.