【问题标题】:PDO looping through and printing fetchAllPDO 循环并打印 fetchAll
【发布时间】:2010-12-03 22:35:55
【问题描述】:

我无法从 fetchAll 获取数据以选择性地打印。

在普通的mysql中我是这样做的:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)){
   $id = $row['id'];
   $n = $row['n'];
   $k = $row['k'];
}

在 PDO 中,我遇到了麻烦。我绑定了参数,然后像上面一样将获取的数据保存到 $rs 中,目的是以相同的方式循环它..

$sth->execute();
$rs = $query->fetchAll();

现在问题来了。我该怎么做才能获得与上面的while循环匹配的东西?!我知道我可以使用 print_r() 或 dump_var,但这不是我想要的。我需要做以前可以用常规 mysql 做的事情,比如根据需要单独获取 $id、$n、$k。有可能吗?

提前谢谢..

【问题讨论】:

    标签: php mysql database pdo fetchall


    【解决方案1】:

    应该是

    while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
      $id = $row['id'];
      $n = $row['n'];
      $k = $row['k'];
    }
    

    如果你坚持fetchAll,那么

    $results = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach($results as $row) {
       $id = $row['id'];
       $n = $row['n'];
       $k = $row['k'];
    }
    

    PDO::FETCH_ASSOC 仅获取列名并省略数字索引。

    【讨论】:

    • 非常感谢您的帮助。我选择了 2,因为在循环之前我也必须计算它。所以将它存储在 $results 之前更有意义。
    • $query->rowCount() 可能返回计数。
    • 它不适用于 SELECT 语句。看到这个问题:stackoverflow.com/questions/460010/…
    • 你在这一行多了一个右括号:$results = $query->fetchAll(PDO::FETCH_ASSOC));
    • while 循环没有显示任何内容,至少它也没有中断进程。 foreach 循环显示结果(我使用了一个虚拟查询SHOW TABLES,这应该不是问题)。我对 foreach 解决方案很好,只是想知道为什么。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多