помогите, пожалуйста, разобраться с ошибкой кода. Я повторяла пример из книги 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 />";
}
больше ничего писать не нужно. В том числе код для вывода ошибки. Не для каждой скрочки писать отдельный обработчик ошибок, РНР прекрасно умеет выводить ошибки самостоятельно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
На сервере поднимаю websocket сервер WorkermanДанный сервер запускается через командную строку (php cli) командой php start
Сидел себе спокойно работал, обновлял страницу в браузере дабы отслеживать изменения и вдруг (Не удается получить доступ к сайту) смотрю...
Начал учить laravel, и наткнулся на странную вещь