Signatur
Beschreibung
mysqli_num_fields() ermittelt, wie viele Spalten eine SQL-Abfrage zurückgeliefert hat. Die Funktion arbeitet auf einem mysqli_result-Objekt, das zuvor durch mysqli_query(), mysqli_store_result() oder mysqli_use_result() erzeugt wurde.
Typische Anwendungsfälle sind dynamische Tabellenausgaben, bei denen die Anzahl der Spalten nicht im Voraus bekannt ist, sowie allgemeine Hilfsfunktionen zur Ergebnisverarbeitung, die strukturunabhängig arbeiten sollen. Mit der zurückgegebenen Zahl lässt sich z. B. eine Schleife über alle Felder aufbauen, ohne die Spaltennamen hartcodieren zu müssen.
In der objektorientierten Schreibweise steht dieselbe Information als Eigenschaft $result->field_count zur Verfügung. Beide Varianten sind semantisch äquivalent.
Die Funktion ist unabhängig vom aktuellen Zeigerstand im Ergebnis und liefert immer die Gesamtzahl der Spalten der Abfrage, nicht die Anzahl der Zeilen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Das mysqli_result-Objekt, das von einer erfolgreichen SELECT-, SHOW-, DESCRIBE- oder EXPLAIN-Abfrage zurückgegeben wurde. |
Rückgabewert
0 zurückgegeben.Beispiele
Anzahl der Spalten einer SELECT-Abfrage ausgeben
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'meinedb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$result = $mysqli->query('SELECT id, vorname, nachname, email FROM kunden');
if ($result) {
$anzahl = mysqli_num_fields($result);
echo 'Anzahl der Spalten: ' . $anzahl;
$result->free();
}
$mysqli->close();
Dynamische HTML-Tabelle ohne bekannte Spaltenstruktur
<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'meinedb');
$result = $mysqli->query('SELECT * FROM produkte LIMIT 5');
if ($result) {
$spaltenAnzahl = mysqli_num_fields($result);
echo '<table border="1">';
// Kopfzeile mit Spaltennamen
echo '<tr>';
for ($i = 0; $i < $spaltenAnzahl; $i++) {
$feldInfo = $result->fetch_field_direct($i);
echo '<th>' . htmlspecialchars($feldInfo->name) . '</th>';
}
echo '</tr>';
// Datenzeilen
while ($zeile = $result->fetch_row()) {
echo '<tr>';
foreach ($zeile as $zelle) {
echo '<td>' . htmlspecialchars((string)$zelle) . '</td>';
}
echo '</tr>';
}
echo '</table>';
$result->free();
}
$mysqli->close();
// Wichtig · Fallstricke
Nur für Abfragen mit Ergebnismenge: mysqli_num_fields() ist ausschließlich für Abfragen sinnvoll, die eine mysqli_result-Instanz liefern (SELECT, SHOW, DESCRIBE, EXPLAIN). Bei INSERT, UPDATE oder DELETE gibt es kein mysqli_result-Objekt; der Aufruf wäre ungültig.
OOP-Äquivalent: In der objektorientierten Schreibweise kann stattdessen die Eigenschaft $result->field_count verwendet werden, die denselben Wert liefert.
Nicht verwechseln: mysqli_num_fields() gibt die Anzahl der Spalten zurück, während mysqli_num_rows() die Anzahl der Zeilen liefert.