fetch_field_direct
Erfahren Sie, wie mysqli_fetch_field_direct() in PHP Metadaten einer einzelnen Spalte anhand ihres Index aus einem Ergebnissatz abruft.
Die Funktion mysqli_fetch_field_direct() ruft die Metadaten einer einzelnen Spalte in einem Ergebnissatz ab, die direkt über ihre numerische Position ausgewählt wird. Metadaten beschreiben die Spalte selbst – ihren Namen, die Tabelle, aus der sie stammt, ihren Datentyp, ihre Länge und ihre Flags – und nicht die darin gespeicherten Zeilenwerte. Diese Seite behandelt die Syntax, das zurückgegebene object, ein vollständiges Beispiel sowie den Anwendungsfall im Vergleich zu verwandten Funktionen.
Syntax
mysqli_fetch_field_direct(mysqli_result $result, int $index): object|falseIm objektorientierten Stil lautet derselbe Aufruf $result->fetch_field_direct($index).
$result— einmysqli_result-object, das von einer Abfrage wiemysqli_query()(odermysqli_store_result()/mysqli_use_result()) zurückgegeben wird.$index— die nullbasierte Position der gewünschten Spalte. Die erste Spalte ist0, die zweite ist1usw. Ein Index außerhalb des gültigen Bereichs führt dazu, dass die Funktionfalsezurückgibt.
Der Rückgabewert ist ein object, dessen Eigenschaften die Spalte beschreiben. Ist der Index ungültig, gibt die Funktion false zurück.
Das Feldobjekt
Das zurückgegebene object stellt folgende Eigenschaften bereit:
| Eigenschaft | Beschreibung |
|---|---|
name | Der Name der Spalte (oder ihr Alias, falls einer verwendet wurde). |
orgname | Der ursprüngliche Spaltenname, falls ein Alias gesetzt wurde. |
table | Der Name der Tabelle, zu der die Spalte gehört (oder ihr Alias). |
orgtable | Der ursprüngliche Tabellenname, falls ein Alias gesetzt wurde. |
def | Der Standardwert der Spalte als string. |
max_length | Die maximale Breite der Spalte für den aktuellen Ergebnissatz. |
length | Die deklarierte Breite der Spalte, wie im Tabellenschema definiert. |
decimals | Die Anzahl der Dezimalstellen bei numerischen Spalten. |
type | Eine ganzzahlige Konstante zur Identifikation des Datentyps (siehe unten). |
flags | Ein ganzzahliges Bitfeld mit Spalten-Flags (z. B. NOT NULL, Primärschlüssel). |
Verwendung von mysqli_fetch_field_direct()
Übergeben Sie einen gültigen Ergebnissatz und den Index der Spalte, deren Metadaten Sie benötigen:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if ($result) {
// Metadata for the second column (index 1, zero-based)
$field = mysqli_fetch_field_direct($result, 1);
printf("Name: %s\n", $field->name);
printf("Table: %s\n", $field->table);
printf("Type: %d\n", $field->type); // integer type constant
printf("Length: %d\n", $field->length);
mysqli_free_result($result);
} else {
echo "Query failed: " . mysqli_error($mysqli);
}
mysqli_close($mysqli);
?>Hier stellen wir eine Verbindung mit mysqli_connect() her und prüfen, ob die Verbindung fehlgeschlagen ist. Wir führen eine Abfrage mit mysqli_query() aus und rufen bei Erfolg mysqli_fetch_field_direct($result, 1) auf, um die Metadaten der zweiten Spalte zu lesen (der Index ist nullbasiert). Wir geben einige Eigenschaften aus und geben den Ergebnissatz anschließend frei. Da type eine ganzzahlige Konstante und kein lesbarer Name ist, formatieren wir ihn mit %d.
Die Typkonstante auslesen
Die Eigenschaft type ist eine der MYSQLI_TYPE_*-Konstanten – eine ganze Zahl, kein Wort wie "varchar". Um daraus etwas Lesbares zu machen, können Sie die Konstanten selbst zuordnen:
<?php
$types = [
MYSQLI_TYPE_DECIMAL => 'DECIMAL',
MYSQLI_TYPE_LONG => 'INT',
MYSQLI_TYPE_VAR_STRING => 'VARCHAR',
MYSQLI_TYPE_STRING => 'CHAR',
MYSQLI_TYPE_DATETIME => 'DATETIME',
];
$field = mysqli_fetch_field_direct($result, 0);
echo $types[$field->type] ?? "Unknown ({$field->type})";
?>Wann verwenden
Verwenden Sie mysqli_fetch_field_direct(), wenn Sie bereits wissen, welche Spalte Sie benötigen, und diese per Index ansprechen können – zum Beispiel beim Erstellen eines generischen Tabellen-Renderers oder bei der Prüfung, ob die zweite Spalte wirklich den erwarteten Typ hat.
- Um die Metadaten jeder Spalte einzeln zu durchlaufen, verwenden Sie
mysqli_fetch_field(), das bei jedem Aufruf einen internen Zeiger weiterbewegt. - Um die Metadaten aller Spalten auf einmal als array abzurufen, verwenden Sie
mysqli_fetch_fields(). - Um die Zeilendaten statt der Spaltenmetadaten abzurufen, verwenden Sie
mysqli_fetch_assoc(),mysqli_fetch_row()odermysqli_fetch_object(). - Um herauszufinden, wie viele Spalten das Ergebnis hat, bevor Sie darauf zugreifen, verwenden Sie
mysqli_field_count().
Fazit
mysqli_fetch_field_direct() liefert die Metadaten einer Spalte, die direkt über ihren nullbasierten Index angesprochen wird, und gibt ein object mit dem Namen, der Tabelle, dem Typ, der Länge und den Flags der Spalte zurück – oder false bei einem ungültigen Index. Die Funktion ergänzt die anderen mysqli_fetch_field*-Funktionen optimal, wenn Sie die Struktur eines Ergebnissatzes und nicht seine Zeilen untersuchen möchten.