PDO 重置結果中的陣列指標
在從MySQL 到PDO 方法的轉換中,嘗試迭代獲取的資料時可能會迭代遇到挑戰數組兩次,每次從第0 行開始。解決方案在於了解兩種方法之間的方法差異。
在 MySQL 框架下,mysql_data_seek 函數將行指標倒回結果陣列中的特定位置。然而,在 PDO 中,此功能不能直接使用。相反,可以採用兩種替代技術來實現所需的結果。
將結果儲存到陣列
第一種方法是將結果儲存在陣列中,如圖所示在下面的程式碼片段中:
$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 }
透過利用fetchAll 方法,整個結果集儲存在$rows 陣列中,允許多次迭代重置指標。
重新執行查詢
或者,可以選擇重新執行查詢。雖然效率低於數組儲存方法,但當結果集相對較小時,這種方法可能就足夠了。
$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 }
透過重新執行查詢,產生一個新的結果集,指標從 row 開始零。這種方法確保兩次迭代都可以存取完整的資料集。
以上是如何重置 PDO 結果中的數組指標以進行多次迭代?的詳細內容。更多資訊請關注PHP中文網其他相關文章!