2012-01-11 62 views
1

我知道這個問題之前已經被問過了,但我嘗試了eveything並且找不到它是如何工作的。 我有一個準備好的查詢,我需要有兩個同時(兩次使用)循環是這樣的:如何倒帶pdo結果?

$query = $pdo->prepare('SELECT ...'); 
$query->execute(); 
while($results = $query->fetch()){ 
// instructions 
} 

// rewind 
while($results = $query->fetch()){ 
// instructions 
} 

感謝

+1

重複:http://stackoverflow.com/questions/278259/is-it-possible-to-rewind-a-pdo-result – TimWolla 2012-01-11 17:27:47

+0

我知道,我看過這篇文章,但我不明白如何使其工作。 – romainberger 2012-01-11 17:30:56

+0

如果你問同樣的問題,你可能會得到相同的答案。 – 2012-01-11 17:33:25

回答

-1

可能是爲獲得在第一次迭代和循環所有的結果一樣簡單2號:

$res = array(); 
while($results = $query->fetch()){ 
    $res[] = $results; 
    // instructions 
} 

foreach($res as $results){ 
    // instructions 
} 
+2

其實,你只需要使用'fetchAll'並擺脫第一個循環。 – netcoder 2012-01-11 17:38:16

+0

@netcoder大聲笑可能是(我不知道PDO **在所有**) – Neal 2012-01-11 17:40:39

+0

方式比我見過的一切都更容易,它的工作原理。謝謝 – romainberger 2012-01-11 17:41:16

3

爲了上面的回答擴大,你可以使用:

$results = $query->fetchAll(); 

個$結果現在是含結果集的數組,從而:

foreach ($results as $row) ... 
與MySQL

或者,也可以使用緩衝的查詢:

$stmt = $db->prepare('SELECT ...', array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); 

的使用fetchall()方法將是獨立的數據庫供應商,但會有更高的內存要求。

+0

是的,但用fetchAll()你必須使用像這樣的行數:$ result [0],然後$ result [1] ...但我需要使用第二個循環中的一些代碼的結果在第一個循環中具有相同的編號,但不是全部結果。所以我不知道這個數字。 (我不知道我是否清楚...) – romainberger 2012-01-11 17:46:25