【问题标题】:How do I fetch mulitiple rows using fetch(PDO::FETCH_ASSOC) with pdo?如何使用 fetch(PDO::FETCH_ASSOC) 和 pdo 获取多行?
【发布时间】:2012-08-19 19:32:18
【问题描述】:

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 行。那么如何检索和打印多行呢?之前提到过使用迭代,但我不确定是否实现它。任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: php pdo fetch loops


    【解决方案1】:

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

    您可能希望将其弹出到一个循环中以获取所有数据:

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

    这样的事情应该可以解决问题:

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

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

    【讨论】:

    • 我可以为这个while() 设置条件吗?因为我只想要前 10 行 (假设结果是 11 行)
    • @Sajad 当然。您可以在 while 子句中包含多个条件 - 但如果您使用 MySQL,我建议您在查询末尾使用 limit 0,10 子句以仅返回前十行(按您的 order by 子句排序)这样做只会更好。
    【解决方案2】:

    您可以简单地返回语句对象。
    或者如果你想封装它(这样它只能用于获取数据)使用the SPL's IteratorIterator

    return new IteratorIterator($stmtAA);
    

    那么你可以使用

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

    在你的脚本中。

    【讨论】:

    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多