Signatur
Beschreibung
mysql_data_seek() setzt den internen Zeigerposition eines Ergebnisressource auf die angegebene Zeilennummer. Dadurch kann mit nachfolgenden Funktionen wie mysql_fetch_array(), mysql_fetch_row() oder mysql_fetch_object() gezielt ab einer bestimmten Zeile des Ergebnisses gelesen werden, ohne vorherige Zeilen überspringen zu müssen.
Die Funktion ist nützlich, wenn man innerhalb eines bereits abgerufenen Ergebnisses navigieren möchte – zum Beispiel um einen Datensatz erneut zu lesen oder um in einem Ergebnissatz direkt an eine bestimmte Position zu springen. Der Zeilenindex ist nullbasiert: Die erste Zeile hat den Index 0, die letzte den Index mysql_num_rows($result) - 1.
Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als veraltet (deprecated) markiert und in PHP 7.0.0 vollständig entfernt. Für neuen Code sollte stattdessen mysqli_data_seek() oder die PDO-Klasse verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | resource | Eine MySQL-Ergebnisressource, die durch einen vorherigen Aufruf von mysql_query() zurückgegeben wurde. |
|
| $row_number Pflicht | int | Der nullbasierte Index der Zeile, auf die der interne Zeiger gesetzt werden soll. Muss zwischen 0 und mysql_num_rows($result) - 1 liegen. |
Rückgabewert
true zurück, wenn der Zeiger erfolgreich bewegt wurde. Gibt false zurück, wenn die angegebene Zeilennummer ungültig ist (z. B. außerhalb des gültigen Bereichs) oder die Ressource ungültig ist.Beispiele
Ergebnis-Zeiger auf eine bestimmte Zeile setzen
<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);
$ergebnis = mysql_query('SELECT id, name FROM benutzer ORDER BY id', $verbindung);
// Direkt zur dritten Zeile (Index 2) springen
if (mysql_data_seek($ergebnis, 2)) {
$zeile = mysql_fetch_assoc($ergebnis);
echo 'ID: ' . $zeile['id'] . ', Name: ' . $zeile['name'];
} else {
echo 'Ungültige Zeilenposition.';
}
mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
Ergebnis zweimal durchlaufen – erster und zweiter Durchlauf
<?php
$verbindung = mysql_connect('localhost', 'benutzer', 'passwort');
mysql_select_db('meine_datenbank', $verbindung);
$ergebnis = mysql_query('SELECT id, name FROM benutzer ORDER BY id LIMIT 3', $verbindung);
// Erster Durchlauf
echo "Erster Durchlauf:" . PHP_EOL;
while ($zeile = mysql_fetch_assoc($ergebnis)) {
echo $zeile['id'] . ': ' . $zeile['name'] . PHP_EOL;
}
// Zeiger zurück an den Anfang setzen
mysql_data_seek($ergebnis, 0);
// Zweiter Durchlauf
echo "Zweiter Durchlauf:" . PHP_EOL;
while ($zeile = mysql_fetch_assoc($ergebnis)) {
echo $zeile['id'] . ': ' . $zeile['name'] . PHP_EOL;
}
mysql_free_result($ergebnis);
mysql_close($verbindung);
?>
// Wichtig · Fallstricke
Veraltet und entfernt: Die gesamte mysql_*-Erweiterung wurde in PHP 5.5.0 als deprecated markiert, in PHP 5.6 als solche gewarnt und in PHP 7.0.0 vollständig entfernt. Sie sollte in keinem neuen Code verwendet werden. Als Ersatz stehen mysqli_data_seek() (prozeduraler Stil) oder PDOStatement zur Verfügung.
mysql_data_seek() funktioniert nicht mit UNBUFFERED-Abfragen (z. B. ausgeführt über mysql_unbuffered_query()), da bei ungepufferten Ergebnissen nicht alle Zeilen gleichzeitig im Speicher liegen.