Signatur
Beschreibung
mysql_fetch_field() liest die Metadaten einer bestimmten Spalte aus einem MySQL-Ergebnis-Ressource und gibt sie als stdClass-Objekt zurück. Typischerweise wird die Funktion in einer Schleife aufgerufen, um alle Spalteninformationen eines Ergebnisses zu durchlaufen.
Das zurückgegebene Objekt enthält folgende Eigenschaften: name (Spaltenname), orgname (originaler Spaltenname bei Aliasen), table (Tabellenname), def (Standardwert), max_length (maximale Breite), not_null (1 wenn NOT NULL), primary_key (1 wenn PRIMARY KEY), unique_key (1 wenn UNIQUE), multiple_key (1 wenn Nicht-Unique-Index), numeric (1 wenn numerisch), blob (1 wenn BLOB), type (Datentyp als String) und unsigned (1 wenn UNSIGNED) sowie zerofill (1 wenn ZEROFILL).
Wird kein field_offset angegeben, beginnt die Funktion bei der ersten noch nicht abgerufenen Spalte. Mit mysql_field_seek() lässt sich der interne Zeiger zurücksetzen. Die Funktion ist besonders nützlich, wenn zur Laufzeit dynamisch auf Spaltennamen und Datentypen eines Ergebnisses reagiert werden soll, z. B. für generische Tabellenausgaben.
Achtung: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet markiert und in PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli_fetch_field() oder die PDO-Methode PDOStatement::getColumnMeta() verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Ein MySQL-Ergebnis-Handle, das von mysql_query(), mysql_store_result() oder mysql_use_result() zurückgegeben wurde. |
|
| $field_offset | int | 0 | Der nullbasierte Index der Spalte, deren Metadaten abgerufen werden sollen. Wird der Parameter weggelassen, wird die nächste noch nicht abgerufene Spalte verwendet. |
Rückgabewert
stdClass-Objekt mit Spaltenmetadaten zurück oder false bei einem Fehler (z. B. ungültiger Offset oder ungültige Ressource).Beispiele
Alle Spalteninformationen eines Ergebnisses ausgeben
<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);
$ergebnis = mysql_query('SELECT id, name, email FROM benutzer LIMIT 1', $verbindung);
$anzahl = mysql_num_fields($ergebnis);
for ($i = 0; $i < $anzahl; $i++) {
$feld = mysql_fetch_field($ergebnis, $i);
echo 'Spaltenname: ' . $feld->name . PHP_EOL;
echo 'Tabellenname: ' . $feld->table . PHP_EOL;
echo 'Typ: ' . $feld->type . PHP_EOL;
echo 'Max. Länge: ' . $feld->max_length . PHP_EOL;
echo 'NOT NULL: ' . ($feld->not_null ? 'Ja' : 'Nein') . PHP_EOL;
echo str_repeat('-', 30) . PHP_EOL;
}
mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
Modernstes Äquivalent mit mysqli
<?php
// Empfohlene Alternative: mysqli_fetch_field()
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'meine_datenbank');
$ergebnis = $mysqli->query('SELECT id, name, email FROM benutzer LIMIT 1');
while ($feld = $ergebnis->fetch_field()) {
echo 'Spaltenname: ' . $feld->name . PHP_EOL;
echo 'Typ (Flag): ' . $feld->type . PHP_EOL;
echo PHP_EOL;
}
$ergebnis->free();
$mysqli->close();
?>
// Wichtig · Fallstricke
Veraltet und entfernt: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert und in PHP 7.0.0 vollständig entfernt. Jeglicher Code, der noch mysql_fetch_field() verwendet, ist nicht mehr lauffähig unter PHP 7 oder höher.
Als direkter Ersatz steht mysqli_fetch_field() bzw. die objektorientierte Methode mysqli_result::fetch_field() zur Verfügung. Für datenbankabstrahierten Code empfiehlt sich PDOStatement::getColumnMeta(), wobei diese Methode je nach Treiber unterschiedliche Ergebnisse liefern kann.
Der interne Spaltenzeiger, den mysql_fetch_field() ohne expliziten Offset verwendet, kann mit mysql_field_seek() zurückgesetzt werden.