6

我正在尝试使用 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']; 那样控制各个列 我呢?它也像这样打印出来;相当丑陋:

Array ( [0] => Array ( [title] => 这是数据库中输入的测试标题[0]

需要做什么才能正确使用 PDO 来做到这一点?

4

2 回答 2

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'];
}
于 2013-01-23T23:47:36.293 回答
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循环内,否则你一次又一次地覆盖,然后只输出最后一行。
于 2013-01-23T23:48:29.770 回答