我正在尝试使用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执行此操作需要做些什么?
答案 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'];
}
附加说明:
$result
是一个误导性的变量名称,您可能会从$result->execute()
行看到。您不执行结果,执行语句。这就是使用手册$stmt
或$sth
(我猜的语句句柄)的原因。echo
行应该在while循环中,否则你会反复覆盖,然后只输出最后一行。