PDO循环遍历并打印fetchAll结果

15

我在使用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();

现在进入困难部分。我在PDO方面该怎么做才能得到与上面while循环相匹配的内容?我知道我可以使用print_r()或dump_var,但这不是我想要的。我需要像以前使用常规mysql一样,根据需要单独获取$id、$n、$k等变量。这有可能吗?

先谢谢。

1个回答

34

应该是这样的

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中存储它更有意义。 - Chris
2
$query->rowCount() 可能会返回计数。 - Zed
2
它对于SELECT语句无效。请参考此问题:https://dev59.com/w3RB5IYBdhLWcg3w77on#660032 - Imran
1
在这行代码中,您多了一个右括号:$results = $query->fetchAll(PDO::FETCH_ASSOC)); - Zetaphor
while循环没有显示任何内容,至少它也没有中断进程。foreach循环显示结果(我使用一个虚拟查询“SHOW TABLES”,这不应该是问题)。我对foreach解决方案感到满意,只是想知道为什么。 - questionto42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接