2011-10-14 64 views
1

我試圖在網頁中一次又一次訪問數據。有沒有更好的辦法 ?有些東西像movetofirst(),movetolast(),movetoprevious(),movetonext()會很好。如何遍歷PDOStatement對象,即獲取第一個,最後一個在前的下一個等等?

現在我正在檢索結果集作爲數組(使用fetchall())和一次又一次地重新使用數組。

有沒有像下面這樣做?我不需要一次又一次地執行查詢。如果結果/數組有多達數百行,則將數據保留在數組中並消耗資源。

$sql = 'SELECT cityname, statename FROM TBLPLACES ORDER BY cityname, statename'; 
$stmt = $conn->query($sql); 
if ($stmt) { 
    while($row=$stmt->fetch()){ 
     // do some thing 
    } 

    // do some more thing 
    // 
    // now here, can i access same $stmt object 
    // to fetch resultset again without executing 
    // $stmt = $conn->query($sql); again ? 
    // (no change in query sql, need to fetch the same static data again.) 
    // 
    // something like below will be nice. 
    // 
    // $stmt->movetofirst(); 
    // while($row=$stmt->fetch()){ 
    // do some thing; 
    // } 
} 
+0

什麼也正是阻止您創建這樣的方法呢?你知道你想要什麼,你知道方法必須做什麼,你有數據中的數據,你知道數組的大小..問題在哪裏?首先,下一個,上一個,最後一個 - 這只是取消了你知道大小的數組。 –

+0

難道你不能只將結果存儲在一個數組中,並在下一次需要這些數據時使用它? – mishu

+0

hi n.b,phihag and mishu,of course,with i我可以按照我希望的順序遍歷任意次數。如果查詢導致成千上萬行,那麼我需要一個巨大的數組(即內存空間),這是我想避免的。 –

回答

2

爲了獲取最後的結果,你可以這樣做:

$row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);

或者manualy寫的行號。其他PDO::FETCH_ORI_*常量here,但基本上你想要更多地關注PDOStatement::fetch()方法中的第二個和第三個參數。

+0

謝謝teresko,這就是我一直在尋找的東西。再次感謝 –

1

只需使用fetchAll來獲取整個結果的數組:

$sql = 'SELECT cityname, statename FROM TBLPLACES ORDER BY cityname, statename'; 
$stmt = $conn->query($sql); 
// You should not silently ignore errors. 
// Set PDO error mode to PDO::ERRMODE_EXCEPTION to handle query failure 
$data = $stmt->fetchAll(); 

foreach ($data as $row) { 
    // Do one thing 
} 
foreach ($data as $row) { 
    // Do another thing 
} 
+0

嗨,我認爲最好的方法是在''forEach''上顯示如何訪問屬性 – Muhaimin

相關問題