Signatur
Beschreibung
mysqli_data_seek() setzt den Ergebniszeiger eines mysqli_result-Objekts auf die durch offset angegebene Zeilennummer. Nachfolgende Aufrufe von mysqli_fetch_row(), mysqli_fetch_assoc() oder ähnlichen Fetch-Funktionen liefern dann die Daten ab dieser Position.
Die Funktion ist besonders nützlich, wenn man in einem Ergebnissatz mehrfach navigieren möchte – etwa um bestimmte Zeilen wiederholt zu lesen oder einen Ergebnissatz rückwärts zu durchlaufen. Der Offset ist nullbasiert, d. h. die erste Zeile hat den Index 0.
Wichtig: mysqli_data_seek() funktioniert nur mit gepufferten Ergebnissen (also mit mysqli_query() oder mysqli_store_result()). Bei ungepufferten Ergebnissen, die mit mysqli_use_result() erzeugt wurden, schlägt die Funktion fehl, da der gesamte Ergebnissatz nicht im Speicher gehalten wird.
Sie ist das prozedurale Gegenstück zur objektorientierten Methode mysqli_result::data_seek().
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $result Pflicht | mysqli_result | Das mysqli_result-Objekt, das von mysqli_query(), mysqli_store_result() oder mysqli_get_result() zurückgegeben wurde. |
|
| $offset Pflicht | int | Der nullbasierte Zeilenindex, auf den der Ergebniszeiger gesetzt werden soll. Gültige Werte liegen zwischen 0 und mysqli_num_rows($result) - 1. |
Rückgabewert
true zurück, wenn der Zeiger erfolgreich gesetzt wurde, andernfalls false – z. B. wenn der Offset außerhalb des gültigen Bereichs liegt oder das Ergebnis ungepuffert ist.Beispiele
Ergebniszeiger auf eine bestimmte Zeile setzen
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
if ($mysqli->connect_errno) {
die('Verbindungsfehler: ' . $mysqli->connect_error);
}
$result = mysqli_query($mysqli, 'SELECT id, name FROM users ORDER BY id');
if ($result === false) {
die('Abfrage fehlgeschlagen: ' . $mysqli->error);
}
// Zeiger auf die dritte Zeile (Index 2) setzen
if (mysqli_data_seek($result, 2)) {
$row = mysqli_fetch_assoc($result);
echo 'Dritter Eintrag: ID=' . $row['id'] . ', Name=' . $row['name'];
} else {
echo 'Zeiger konnte nicht gesetzt werden (Offset außerhalb des Bereichs)';
}
mysqli_free_result($result);
$mysqli->close();
Ergebnissatz rückwärts durchlaufen
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'testdb');
$result = mysqli_query($mysqli, 'SELECT id, name FROM users ORDER BY id');
$numRows = mysqli_num_rows($result);
echo 'Einträge in umgekehrter Reihenfolge:' . PHP_EOL;
for ($i = $numRows - 1; $i >= 0; $i--) {
mysqli_data_seek($result, $i);
$row = mysqli_fetch_assoc($result);
echo 'ID=' . $row['id'] . ', Name=' . $row['name'] . PHP_EOL;
}
mysqli_free_result($result);
$mysqli->close();
// Wichtig · Fallstricke
Nur mit gepufferten Ergebnissen: mysqli_data_seek() schlägt stillschweigend fehl, wenn das Ergebnis mit mysqli_use_result() (ungepufferter Modus) erzeugt wurde. Stellen Sie sicher, dass Sie mysqli_query() oder mysqli_store_result() verwenden.
Speicherverbrauch: Gepufferte Ergebnisse werden vollständig im Arbeitsspeicher gehalten. Bei sehr großen Ergebnismengen kann dies zu einem hohen Speicherverbrauch führen. In solchen Fällen sollte die SQL-Abfrage selbst optimiert werden (z. B. mit LIMIT).
Der gültige Offset-Bereich liegt von 0 bis mysqli_num_rows($result) - 1. Ein Offset außerhalb dieses Bereichs gibt false zurück, ohne eine PHP-Warnung auszulösen.