помогите, пожалуйста, разобраться с ошибкой кода. Я повторяла пример из книги 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();
}
Call to a member function fetch() on boolean in
- это вторичная ошибка, вызванная проблемой при выполнении SQL запроса. Чтобы получить настоящее сообщение об ошибке, надо соответствующим образом настроить PDO.
К сожалению, пример из книги очень устарел, в нем почти все неправильно. И в первую очередь нормальное информирование об ошибках. В примере отсутствуют нужные элементы, и наоборот, добавлен бессмысленный код, который ничего не делает.
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);
<?php
require_once("connect.php");
$query = "SELECT * FROM catalog";
$cat = $pdo->query($query);
while($catalog = $cat->fetch()) {
echo $catalog['name']."<br />";
}
больше ничего писать не нужно. В том числе код для вывода ошибки. Не для каждой скрочки писать отдельный обработчик ошибок, РНР прекрасно умеет выводить ошибки самостоятельно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
На сервере поднимаю websocket сервер WorkermanДанный сервер запускается через командную строку (php cli) командой php start
Сидел себе спокойно работал, обновлял страницу в браузере дабы отслеживать изменения и вдруг (Не удается получить доступ к сайту) смотрю...
Начал учить laravel, и наткнулся на странную вещь