2012-08-24 135 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