2012-08-24 86 views
1

testQuery()是我使用從表格類別得到所有行的方法如何用pdo使用fetch(PDO :: FETCH_ASSOC)獲取多行數據?

public function __construct() 
{ 
self::$tdb = Database::getConnection(); 
} 



#mock query to pull results from db 
public function testQuery() 
    { 
     $queryAA = "SELECT cat_name, cat_description, cat_id FROM CATEGORIES"; 
     $stmtAA = self::$tdb->prepare($queryAA); 


     if ($stmtAA->execute() == true) 
     { 
      print("Execution was successful"); 
      return $stmtAA->fetch(PDO::FETCH_ASSOC); 
     } 
     else 
     { 
      print("Warning statment did not successfully execute"); 
     } 
    } 

我通常使用使用fetchall(),但我被告知要使用取,因爲它不會佔用盡可能多的內存。 但我無法使用fetch()和下面的代碼檢索多個行。

$test = new test(); 
$results = $test->testQuery(); 


foreach ($results as $row) 
{ 
print_r($row); 
} 

它只提取1行。那麼如何檢索和打印多行?之前提到使用迭代,但我不確定要實現它。任何幫助將不勝感激。謝謝!

回答

1

您可以簡單地返回語句對象。
或者,如果你想將其封裝(所以它只能被用來獲取數據)使用the SPL's IteratorIterator

return new IteratorIterator($stmtAA); 

,那麼你可以在你的腳本中使用

foreach(testQuery() as $row) { ... } 

+0

完美^這是這個迭代器對象對我來說是新的我必須看看,但感謝您的幫助! –

2

提取確實每次都從數據庫中提取數據,但您需要遍歷行直到獲得所有數據。

你可能想跳進一個循環這讓所有的數據:

$stmtAA->fetch(PDO::FETCH_ASSOC); 

像這樣的東西應該做的伎倆:

while($row=$this->prepared->fetch(PDO::FETCH_ASSOC)) 
{ 
    $this->ID=$row['id']; 
    $something=$row['something']; 
} 

取決於如果你是填充變量或有對象內的代碼。

+0

是否有可能爲此'while()'添加條件?因爲我只需要10個第一行*(假設結果是11行)* – Shafizadeh

+0

@Sajad當然。你可以在'while'子句中有多個條件 - 儘管如果你使用的是MySQL,我會建議在你的查詢結尾使用一個「limit 0,10」子句來只返回前10行(按你的命令排序)由'條款),只有更好的做同樣的事情。 – Fluffeh