Добрый день!
Я создал класс подключения к базе данных 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']; }
это весь необходимый код.