Start · Sprachen · PHP · Referenz · mysql_fetch_field

mysql_fetch_field

Funktion

Gibt ein Objekt zurück, das Metainformationen (Name, Typ, Flags usw.) über eine Spalte eines MySQL-Abfrageergebnisses enthält.

seit PHP 4.0.0 Kategorie: db

Signatur

mysql_fetch_field(resource $result, int $field_offset = 0): object|false

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

Typ
object|false
Beschreibung
Gibt ein 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);
?>
Spaltenname: id Tabellenname: benutzer Typ: int Max. Länge: 1 NOT NULL: Ja ------------------------------ Spaltenname: name Tabellenname: benutzer Typ: string Max. Länge: 0 NOT NULL: Nein ------------------------------ Spaltenname: email Tabellenname: benutzer Typ: string Max. Länge: 0 NOT NULL: Nein ------------------------------

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();
?>
Spaltenname: id Typ (Flag): 3 Spaltenname: name Typ (Flag): 253 Spaltenname: email Typ (Flag): 253

// 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.