Start · Sprachen · PHP · Referenz · mysqli_num_fields

mysqli_num_fields

Funktion

Gibt die Anzahl der Spalten (Felder) einer <code>mysqli_result</code>-Ergebnismenge zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_num_fields(mysqli_result $result): int

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

Typ
int
Beschreibung
Die Anzahl der Spalten in der Ergebnismenge als nicht-negative ganze Zahl. Bei einer leeren oder spaltenlosen Ergebnismenge wird 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();
Anzahl der Spalten: 4

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.