Uncaught Error: Call to a member function fetch() on boolean in

233
20 апреля 2022, 16:40

помогите, пожалуйста, разобраться с ошибкой кода. Я повторяла пример из книги PHP7 в подлиннике. 1.Код соединения с Базой данных connect.php

<?php
try {
$pdo = new PDO ('mysql:host=localhost; dbname = kinoplay', 'root', ''); 
}
catch (PDOException $e) {
    echo "Невозможно установить соединение с базой данных";
}
?>


2.Извлечение данных при помощи PDO
require_once("connect.php");
$query = "SELECT * FROM catalog";
$cat = $pdo->query($query);
       try {
        while($catalog = $cat->fetch())echo $catalog['name']."<br />";
} catch (PDOException $e) {
    echo "Ошибка выполнения запроса: ". $e->getMessage();
}
Answer 1

Call to a member function fetch() on boolean in - это вторичная ошибка, вызванная проблемой при выполнении SQL запроса. Чтобы получить настоящее сообщение об ошибке, надо соответствующим образом настроить PDO.

К сожалению, пример из книги очень устарел, в нем почти все неправильно. И в первую очередь нормальное информирование об ошибках. В примере отсутствуют нужные элементы, и наоборот, добавлен бессмысленный код, который ничего не делает.

1. Код соединения с Базой данных connect.php

Правильный код можно взять отсюда. В частности, там объясняется одна из ошибок, допущенных в этом коде. в DSN не должно быть никаких украшений - пробелов, лишних кавычек и прочего. А вот что обязательно должно быть - это указание кодировки, в которой мы хотим получать данные.

Кроме того, как и говорилось выше, при соединении надо сказать PDO, чтобы он сообщал об ошибках запросов. Для этого четвертым параметром передается массив с настройками (в который можно включить и другие полезные опции)

<?php
$options = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION, // сообщать об ошибках
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, // чтобы не писать каждый раз
    \PDO::ATTR_EMULATE_PREPARES   => false, // для удобства
];
$dsn = 'mysql:host=localhost;dbname=kinoplay;charset=utf8mb4';
$pdo = new \PDO($dsn, 'root', '', $options); 

2. Извлечение данных при помощи PDO

<?php
require_once("connect.php");
$query = "SELECT * FROM catalog";
$cat = $pdo->query($query);
while($catalog = $cat->fetch()) {
    echo $catalog['name']."<br />";
}

больше ничего писать не нужно. В том числе код для вывода ошибки. Не для каждой скрочки писать отдельный обработчик ошибок, РНР прекрасно умеет выводить ошибки самостоятельно.

READ ALSO
Как поддерживать постоянную работу скрипта в фоновом режиме?

Как поддерживать постоянную работу скрипта в фоновом режиме?

На сервере поднимаю websocket сервер WorkermanДанный сервер запускается через командную строку (php cli) командой php start

214
Вывод готового изображения php скриптом

Вывод готового изображения php скриптом

В общем стоит такая задача:

150
Перестал работать openserver

Перестал работать openserver

Сидел себе спокойно работал, обновлял страницу в браузере дабы отслеживать изменения и вдруг (Не удается получить доступ к сайту) смотрю...

102
The POST method is not supported for this route

The POST method is not supported for this route

Начал учить laravel, и наткнулся на странную вещь

178