使用PDO回显显示表中的所有行

时间:2013-01-23 23:39:09

标签: php pdo

我正在尝试使用PDO回显表的所有行,但遇到了麻烦。

按照旧方式,我就像

那样做了
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)){
   $title= $row['title'];
   $body= $row['body'];
}

但是我正在尝试使用PDO;

$result = $db->prepare("SELECT title, body FROM post");
$result->execute();

while ($row = $db->fetchAll(PDO::FETCH_ASSOC))
{
$title = $row['title'];
$body = $row['body'];
}

echo $title;
echo $body;

一直在给我调用未定义的方法PDO :: fetchAll()

执行手册中给出的示例

<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>

有效,但我不认为我可以控制单个列,就像我用$ row = ['blah'];我呢?它也像这样打印出来;相当难看:

  

数组([0] =&gt;数组([title] =&gt;这是在数据库中输入的测试标题[0]

正确使用PDO执行此操作需要做些什么?

2 个答案:

答案 0 :(得分:9)

变化:

while ($row = $db->fetchAll(PDO::FETCH_ASSOC))
{
$title = $row['title'];
$body = $row['body'];
}

为:

while ($row = $result->fetch(PDO::FETCH_ASSOC))
{
$title = $row['title'];
$body = $row['body'];
}

答案 1 :(得分:2)

  

一直在给我调用未定义的方法PDO :: fetchAll()

这应该给你提示你正在使用错误的对象。您可以在第二个示例中看到PDOStatement::fetchAll,或者如果您想在while循环中使用它PDOStatement::fetch

while ($row = $result->fetch(PDO::FETCH_ASSOC))
{
    $title = $row['title'];
    $body = $row['body'];
}

附加说明:

  1. $result是一个误导性的变量名称,您可能会从$result->execute()行看到。您不执行结果,执行语句。这就是使用手册$stmt$sth(我猜的语句句柄)的原因。
  2. echo行应该在while循环中,否则你会反复覆盖,然后只输出最后一行。