Signatur
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
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();
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();
// 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.