Start · Sprachen · PHP · Referenz · mysqli_fetch_field_direct

mysqli_fetch_field_direct

Funktion

Ruft ein Objekt mit Metadaten (Name, Typ, Länge usw.) für eine einzelne Spalte eines Abfrageergebnisses anhand ihres Index ab.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_fetch_field_direct(mysqli_result $result, int $index): object|false

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

Typ
object|false
Beschreibung
Gibt ein Objekt mit den Metadaten der angegebenen Spalte zurück. Bei einem ungültigen Index wird 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();
Spaltenname: username Tabelle: users Typ (int): 253 Länge: 255

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();
Spalte Tabelle Typ Länge -------------------------------------------------- id users 3 11 username users 253 255 created_at users 12 19

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