如何使用带PDO的fetch(PDO::fetch_ASSOC)来获取多行


How do I fetch mulitiple rows using fetch(PDO::FETCH_ASSOC) with pdo?

testQuery()是我用来从CATEGORIES 表中获取所有行的方法

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,因为它不会占用那么多内存。但是我在使用fetch()和下面的代码检索多行时遇到了问题。

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

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

它只获取1行。那么,如何检索和打印多行呢?使用迭代之前提到过,但我不确定是否能实现它。任何帮助都将不胜感激。谢谢

Fetch确实一次从数据库中提取一个数据,但您需要遍历这些行,直到获得所有数据。

你可能想把它弹出一个循环来获取所有数据:

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

像这样的东西应该可以做到:

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

取决于您是在填充变量还是在对象中包含代码。

您可以简单地返回语句对象
或者,如果您想封装它(以便它只能用于获取数据),请使用SPL的IteratorIterator

return new IteratorIterator($stmtAA);

然后你可以使用

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

在您的脚本中。