Start · Sprachen · PHP · Referenz · mysqli_fetch_fields

mysqli_fetch_fields

Funktion

Gibt ein Array von Objekten zurück, die alle Spalten-Metadaten einer Ergebnismenge beschreiben.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_fetch_fields(mysqli_result $result): array

Beschreibung

mysqli_fetch_fields() liefert ein Array von Objekten, wobei jedes Objekt die Metadaten einer einzelnen Spalte der Ergebnismenge enthält. Die Funktion ist praktisch identisch mit mehrfachen Aufrufen von mysqli_fetch_field(), liefert aber alle Spalteninformationen auf einmal.

Jedes zurückgegebene Objekt besitzt Eigenschaften wie name (Spaltenname), orgname (ursprünglicher Spaltenname bei Aliasen), table (Tabellenname), orgtable, def (Standardwert), db (Datenbankname), max_length (maximale Breite im Ergebnis), length (Breite lt. Schemadefinition), charsetnr (Zeichensatz-ID), flags (Bit-Flags), type (Datentyp als Integer) sowie decimals (Anzahl der Dezimalstellen).

Typische Einsatzbereiche sind dynamische Tabellendarstellungen, generische Export-Funktionen (z. B. CSV, Excel) oder Debugging-Werkzeuge, die Spaltentypen und -namen automatisch ermitteln sollen, ohne diese hart zu kodieren.

Die Funktion steht sowohl als prozedurale Variante (mysqli_fetch_fields($result)) als auch als objektorientierte Methode ($result->fetch_fields()) zur Verfügung.

Parameter

Name Typ Default Beschreibung
$result Pflicht mysqli_result Ein von mysqli_query(), mysqli_store_result() oder mysqli_use_result() zurückgegebenes mysqli_result-Objekt.

Rückgabewert

Typ
array
Beschreibung
Gibt ein Array von Objekten zurück, eines pro Spalte der Ergebnismenge. Jedes Objekt enthält Metadaten wie name, table, type, length, flags usw. Das Array ist niemals false; bei einer leeren Ergebnismenge (kein SELECT oder keine Spalten) wird ein leeres Array zurückgegeben.

Beispiele

Spaltenmetadaten einer Abfrage ausgeben

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

if ($mysqli->connect_errno) {
    die('Verbindungsfehler: ' . $mysqli->connect_error);
}

$result = $mysqli->query('SELECT id, vorname AS first, nachname FROM benutzer LIMIT 1');

if (!$result) {
    die('Abfragefehler: ' . $mysqli->error);
}

$felder = $result->fetch_fields();

foreach ($felder as $feld) {
    echo 'Aliasname  : ' . $feld->name      . PHP_EOL;
    echo 'Org. Name  : ' . $feld->orgname   . PHP_EOL;
    echo 'Tabelle    : ' . $feld->table      . PHP_EOL;
    echo 'Typ (Int)  : ' . $feld->type       . PHP_EOL;
    echo 'Laenge     : ' . $feld->length     . PHP_EOL;
    echo '---' . PHP_EOL;
}

$result->free();
$mysqli->close();
Aliasname : id Org. Name : id Tabelle : benutzer Typ (Int) : 3 Laenge : 11 --- Aliasname : first Org. Name : vorname Tabelle : benutzer Typ (Int) : 253 Laenge : 200 --- Aliasname : nachname Org. Name : nachname Tabelle : benutzer Typ (Int) : 253 Laenge : 200 ---

Dynamische HTML-Tabelle mit automatischen Spaltenüberschriften

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');
$result = $mysqli->query('SELECT id, vorname, nachname, email FROM benutzer');

$felder = $result->fetch_fields();

echo '<table border="1">';
echo '<tr>';
foreach ($felder as $feld) {
    echo '<th>' . htmlspecialchars($feld->name) . '</th>';
}
echo '</tr>';

while ($zeile = $result->fetch_assoc()) {
    echo '<tr>';
    foreach ($zeile as $wert) {
        echo '<td>' . htmlspecialchars((string)$wert) . '</td>';
    }
    echo '</tr>';
}

echo '</table>';

$result->free();
$mysqli->close();
<table border="1"><tr><th>id</th><th>vorname</th><th>nachname</th><th>email</th></tr>...</table>

// Wichtig · Fallstricke

Typ-Konstanten: Der ganzzahlige Wert von $feld->type kann mit den Konstanten MYSQLI_TYPE_* verglichen werden (z. B. MYSQLI_TYPE_LONG für INT, MYSQLI_TYPE_VAR_STRING für VARCHAR). Diese Konstanten sind im PHP-MySQLi-Erweiterungsmodul vordefiniert.

flags-Bitmuster: Die Eigenschaft flags ist ein Bitmuster und kann mit Konstanten wie MYSQLI_PRI_KEY_FLAG, MYSQLI_NOT_NULL_FLAG oder MYSQLI_AUTO_INCREMENT_FLAG geprüft werden, um Primärschlüssel, NOT-NULL-Felder usw. zu identifizieren.

max_length: Die Eigenschaft max_length enthält die tatsächlich längste Zeichenkette im aktuellen Ergebnis, nicht die Schemadefinition. Sie ist nur dann zuverlässig befüllt, wenn das Ergebnis mit mysqli_store_result() gepuffert wurde; bei mysqli_use_result() ist der Wert 0.