2012-01-11 55 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