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 }
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 }
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!