Signatur
Beschreibung
mysql_field_seek() verschiebt den internen Feldzeiger eines MySQL-Ergebnisses auf den angegebenen Offset. Dies ist nützlich, wenn man nach dem Iterieren über Felder an eine frühere Position zurückkehren oder direkt zu einem bestimmten Feld springen möchte, ohne alle vorherigen Felder mit mysql_fetch_field() einzeln durchlaufen zu müssen.
Die Funktion wird typischerweise in Verbindung mit mysql_fetch_field() verwendet: Man setzt den Zeiger mit mysql_field_seek() auf den gewünschten Offset und ruft danach mysql_fetch_field() ohne Offset-Argument auf. So lässt sich gezielt auf Metadaten eines bestimmten Felds (z. B. Name, Typ, Flags) zugreifen.
Der Feldoffset ist nullbasiert, d. h. das erste Feld hat den Offset 0, das zweite 1 usw. Liegt der angegebene Offset außerhalb des gültigen Bereichs, gibt die Funktion false zurück und erzeugt eine Warnung.
Achtung: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli oder PDO verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Das MySQL-Ergebnis-Ressource-Handle, das von mysql_query(), mysql_db_query() oder mysql_list_fields() zurückgegeben wurde. |
|
| $field_offset Pflicht | int | Der nullbasierte Offset des Feldes, auf das der interne Zeiger gesetzt werden soll. 0 entspricht dem ersten Feld, 1 dem zweiten usw. |
Rückgabewert
true zurück, wenn der Zeiger erfolgreich gesetzt wurde. Gibt false zurück, wenn der angegebene Offset ungültig (außerhalb des Bereichs) oder das Ergebnis-Handle ungültig ist.Beispiele
Feldmetadaten eines bestimmten Feldes abrufen
<?php
$conn = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('beispiel_db', $conn);
$result = mysql_query('SELECT id, name, email FROM benutzer', $conn);
// Direkt zum dritten Feld (Offset 2 = 'email') springen
if (mysql_field_seek($result, 2)) {
$feldInfo = mysql_fetch_field($result);
echo 'Feldname: ' . $feldInfo->name . PHP_EOL;
echo 'Feldtyp: ' . $feldInfo->type . PHP_EOL;
} else {
echo 'Ungültiger Feldoffset.';
}
mysql_free_result($result);
mysql_close($conn);
?>
Alle Felder iterieren und dabei Zeiger zurücksetzen
<?php
$conn = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('beispiel_db', $conn);
$result = mysql_query('SELECT id, name, email FROM benutzer', $conn);
$anzahlFelder = mysql_num_fields($result);
echo 'Erster Durchlauf:' . PHP_EOL;
for ($i = 0; $i < $anzahlFelder; $i++) {
$feld = mysql_fetch_field($result);
echo ' Feld ' . $i . ': ' . $feld->name . PHP_EOL;
}
// Zeiger zurück auf das erste Feld setzen
mysql_field_seek($result, 0);
echo 'Zweiter Durchlauf (nach Reset):' . PHP_EOL;
for ($i = 0; $i < $anzahlFelder; $i++) {
$feld = mysql_fetch_field($result);
echo ' Feld ' . $i . ': ' . $feld->name . PHP_EOL;
}
mysql_free_result($result);
mysql_close($conn);
?>
// Wichtig · Fallstricke
Deprecation-Hinweis: Die mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert, in PHP 5.6.0 offiziell abgekündigt und in PHP 7.0.0 vollständig entfernt. Code, der diese Funktion verwendet, ist auf PHP 7+ nicht mehr lauffähig.
Als Ersatz für mysql_field_seek() mit mysql_fetch_field() bietet mysqli die Methode mysqli_result::fetch_field_direct() an, mit der ein Feld direkt per Offset abgerufen werden kann, ohne einen separaten Seek-Schritt zu benötigen. Alternativ steht PDO::getColumnMeta() zur Verfügung.
Der Feldoffset ist immer nullbasiert. Ein Offset, der größer oder gleich der Anzahl der Felder im Ergebnis ist, führt zu einem Fehler und dem Rückgabewert false.