Неустранимая ошибка: вызов функции-члена fetchALL () для не-объекта – использование PDO в базе данных Microsoft Access

Добрый день!

Я создал класс подключения к базе данных Microsoft Access (которая работает). Однако моя проблема заключается в том, где я пытаюсь использовать этот класс для выполнения простого оператора SQL, и я получаю сообщение об ошибке: Fatal error: вызов функции-члена fetchALL () для не-объекта.

Я довольно новичок в PDO и прочитал много статей в Интернете, но безрезультатно. Я думаю, что понимаю мою проблему, но не полностью, пожалуйста, кто-то может пролить свет на ситуацию и, возможно, дать ответ на вопрос, почему я получаю сообщение об ошибке?

connectionClass.php

class connection{ public $con; private $dbName; function __construct(){ $this->dbName = $_SERVER["DOCUMENT_ROOT"] . "\database\yakety1new.mdb"; } function connect(){ $this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$this->dbName; Uid=Admin; Pwd=;"); $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); return $this->con; } } if (!ini_get('display_errors')) { ini_set('display_errors', '1'); } 

testIndex.php

 try{ include_once '\classes\connectionClass.php'; $con = new connection(); $pdoConnection = $con->connect(); $sql = $pdoConnection->prepare("SELECT * FROM celebs"); $result = $pdoConnection->exec($sql); while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) { echo $row['firstname']; echo $row['surname']; } } catch (Exception $e){ echo 'ERROR:'.$e->getMessage(); file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND); } if (!ini_get('display_errors')) { ini_set('display_errors', '1'); } 

Сообщение об ошибке связано с этой строкой:

 while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) { 

Любая помощь очень ценится, спасибо!

$result – это просто логическое значение, указывающее, был ли запрос успешным или нет. Метод fetchAll находится на PDOStatement , поэтому он должен быть:

 while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { 

Вы также выполняете утверждение неправильно, это должно быть:

 $result = $sql->execute(); 

Этот метод используется для выполнения строки SQL без предварительной подготовки. Вместо этого вы можете:

 $result = $pdoConnection->exec("SELECT * FROM celebs"); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { 
 ini_set('display_errors', '1'); include_once '\classes\connectionClass.php'; $con = new connection(); $pdoConnection = $con->connect(); $data = $pdoConnection->query("SELECT * FROM celebs")->fetchAll(); foreach ($data as $row) { echo $row['firstname']; echo $row['surname']; } 

это весь необходимый код.