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