Я пытаюсь отобразить все строки таблицы, используя 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']; }
Дополнительные замечания:
$result
– это вводящее в заблуждение имя переменной, как вы можете видеть из строки $result->execute()
. Вы не выполняете результат , вы выполняете инструкцию . Вот почему в руководстве используются $stmt
или $sth
(дескриптор инструкции, я думаю). echo
линии должны быть внутри цикла while, иначе вы перезаписываете снова и снова, а затем выводите только последнюю строку.