2010-10-13 55 views
2

我感到困惑這個問題,我運行一個查詢,如PHP/PDO:返回沒有foreach的查詢行?

foreach($dbh->query("SELECT * FROM ...") as $row) { 
    ...do something with row() 

但是,當我的var_dump $dbh它是一個PDOStatement對象的對象。

這使我兩個問題:

  • 怎樣的foreach某種程度上解決對象在不同的​​行?
  • 如何將所有行存儲在數組中,如$ arr = $ dbh-> query(...)?這不起作用,因爲它仍然是一個對象

我可以在foreach當然下運行,也$常用3 [] = $行,但似乎有點傻..

+0

不,'$ arr [] = $ row;'不傻。這是正常的,順序的方式。 PDO有一個現成的輔助功能,可以一次完成它,但你也可以自己做同樣的功能。沒什麼大不了的。 – 2010-10-13 05:57:09

回答

5

使用PDOStatement::fetchAll()到將整個結果集作爲數組獲取。就PDO在內部執行什麼而言,它使用迭代器來訪問記錄集的某種表示形式。這樣你使用較少的內存,因爲你不會把整個結果集拉到php中,你使用的東西類似於實現內部的一個resource

7
  1. PHP有一些有趣的接口,可以讓你以數組的形式處理對象。在這種情況下,PDOStatement類實現了Traversable,這允許在其上使用foreach。請看這裏http://www.php.net/manual/en/class.pdostatement.php

  2. 要在一個陣列中獲得所有結果,請查看PDOStatement::fetchAll。如果遇到問題,還可以考慮在php.net上檢查PHP文檔。它包含了很多示例和有用的用戶評論。