Heim > Backend-Entwicklung > PHP-Tutorial > Wie setze ich den Array-Zeiger in PDO-Ergebnissen für mehrere Iterationen zurück?

Wie setze ich den Array-Zeiger in PDO-Ergebnissen für mehrere Iterationen zurück?

Linda Hamilton
Freigeben: 2024-10-30 04:09:28
Original
685 Leute haben es durchsucht

How to Reset the Array Pointer in PDO Results for Multiple Iterations?

PDO-Reset-Array-Zeiger in Ergebnissen

Beim Übergang von MySQL- zu PDO-Methoden kann es zu Herausforderungen kommen, wenn versucht wird, einen Abgerufenen zu durchlaufen Array zweimal, jedes Mal beginnend bei Zeile Null. Die Lösung liegt darin, die Unterschiede im Ansatz zwischen den beiden Methoden zu verstehen.

Unter dem MySQL-Framework spult die Funktion mysql_data_seek den Zeilenzeiger an eine bestimmte Position innerhalb des resultierenden Arrays zurück. In PDO ist diese Funktionalität jedoch nicht direkt verfügbar. Stattdessen kann man zwei alternative Techniken anwenden, um das gewünschte Ergebnis zu erzielen.

Ergebnisse in einem Array speichern

Der erste Ansatz beinhaltet das Speichern der Ergebnisse in einem Array, wie gezeigt im folgenden Codeausschnitt:

$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC');
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();

$rows = $stmt->fetchAll();

foreach ($rows as $r) {
    // first run
}

foreach ($rows as $r) {
    // second run
}
Nach dem Login kopieren

Durch die Verwendung der Methode fetchAll wird der gesamte Ergebnissatz im Array $rows gespeichert, was mehrere Iterationen mit ermöglicht der Reset-Zeiger.

Erneute Ausführung der Abfrage

Alternativ kann man sich dafür entscheiden, die Abfrage erneut auszuführen. Dieser Ansatz ist zwar weniger effizient als die Array-Speichermethode, kann aber ausreichen, wenn die Ergebnismenge relativ klein ist.

$pdo = new PDO('mysql:host=' . $host . ';dbname='.$database, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare('SELECT * FROM mytable WHERE active = 1 ORDER BY name ASC');
$stmt->setFetchMode(PDO::FETCH_ASSOC);

while($row = $stmt->fetch())
{
    // first run
}

$stmt->execute(); //re-execute the query

while($row = $stmt->fetch())
{
    // second run
}
Nach dem Login kopieren

Durch erneutes Ausführen der Abfrage wird eine neue Ergebnismenge generiert, wobei der Zeiger bei Zeile beginnt null. Dieser Ansatz stellt sicher, dass beide Iterationen Zugriff auf den vollständigen Datensatz haben.

Das obige ist der detaillierte Inhalt vonWie setze ich den Array-Zeiger in PDO-Ergebnissen für mehrere Iterationen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage