Start · Sprachen · PHP · Referenz · mysql_num_fields

mysql_num_fields

Funktion

Liefert die Anzahl der Felder (Spalten) in einem MySQL-Abfrageergebnis als Ganzzahl zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_num_fields(resource $result): int|false

Beschreibung

mysql_num_fields() gibt die Anzahl der Felder (Spalten) zurück, die in einem Ergebnis-Resource-Objekt enthalten sind, das von einer MySQL-Abfrage wie mysql_query() erzeugt wurde. Die Funktion ist nützlich, wenn man eine SELECT-Abfrage dynamisch verarbeiten möchte, ohne die Spaltenanzahl vorab zu kennen – z. B. beim generischen Ausgeben von Tabellendaten.

Typischer Einsatz ist die Kombination mit mysql_fetch_row() oder mysql_fetch_array() in einer Schleife, um spaltenweise auf Ergebnisdaten zuzugreifen oder automatisch HTML-Tabellen zu generieren.

Wichtig: Die gesamte mysql_*-Erweiterung wurde mit PHP 5.5 als veraltet markiert (deprecated) und mit PHP 7.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli_num_fields() oder die PDO-Methode PDOStatement::columnCount() verwendet werden.

Parameter

Name Typ Default Beschreibung
$result Pflicht resource Ein gültiges MySQL-Ergebnis-Resource-Objekt, das von mysql_query(), mysql_store_result() oder mysql_use_result() zurückgegeben wurde.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Anzahl der Felder (Spalten) im Ergebnis als nicht-negative Ganzzahl zurück. Bei einem Fehler oder ungültigem Resource-Handle wird false zurückgegeben.

Beispiele

Spaltenanzahl eines SELECT-Ergebnisses ermitteln

<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);

$ergebnis = mysql_query('SELECT id, name, email FROM benutzer', $verbindung);

if ($ergebnis) {
    $anzahl = mysql_num_fields($ergebnis);
    echo "Anzahl der Felder: " . $anzahl;
} else {
    echo "Abfrage fehlgeschlagen: " . mysql_error();
}

mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
Anzahl der Felder: 3

Dynamische HTML-Tabelle aus Abfrageergebnis generieren

<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);

$ergebnis = mysql_query('SELECT * FROM produkte', $verbindung);

if ($ergebnis) {
    $feldAnzahl = mysql_num_fields($ergebnis);

    echo "<table border='1'>\n<tr>";

    // Spaltenköpfe ausgeben
    for ($i = 0; $i < $feldAnzahl; $i++) {
        echo "<th>" . mysql_field_name($ergebnis, $i) . "</th>";
    }
    echo "</tr>\n";

    // Datenzeilen ausgeben
    while ($zeile = mysql_fetch_row($ergebnis)) {
        echo "<tr>";
        for ($i = 0; $i < $feldAnzahl; $i++) {
            echo "<td>" . htmlspecialchars($zeile[$i]) . "</td>";
        }
        echo "</tr>\n";
    }

    echo "</table>";
    mysql_free_result($ergebnis);
}

mysql_close($verbindung);
?>

// Wichtig · Fallstricke

Deprecation und Entfernung: Die mysql_*-Erweiterung ist seit PHP 5.5 als veraltet markiert und wurde in PHP 7.0 vollständig entfernt. Code, der diese Funktion verwendet, wird unter PHP 7.0+ einen fatalen Fehler auslösen. Migrieren Sie zu mysqli_num_fields() (prozedural) oder PDOStatement::columnCount() (OOP/PDO).

Nur für SELECT-Ergebnisse: mysql_num_fields() ist nur für Abfragen sinnvoll, die ein Ergebnis-Set zurückgeben (z. B. SELECT, SHOW, DESCRIBE). Für INSERT, UPDATE oder DELETE gibt es keine Felder und der Rückgabewert ist nicht aussagekräftig.

Sicherheit: Bei der Ausgabe von Feldinhalten immer htmlspecialchars() verwenden, um XSS-Angriffe zu verhindern, wie im zweiten Beispiel gezeigt.