Использование 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']; я? Он также печатает так: довольно уродливый:

Array ([0] => Array ([title] => Это тестовое название, введенное в базу данных [0]

Что нужно сделать для правильного использования PDO для этого?

изменение:

 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']; } 

Который продолжает давать мне вызов неопределенного метода 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, иначе вы перезаписываете снова и снова, а затем выводите только последнюю строку.