Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP база данных

Danila Khasanov Ученик (130), на голосовании 2 года назад
Ошибка:
Fatal error: Uncaught Error: Call to a member function fetchAll() on bool in E:\OpenServer\domains\steam\config\Database.php on line 34

вот код:
<?php

namespace Core;

use PDO;
use PDOException;

class Database
{
public $connect;

/**
* Database constructor.
*/
public function __construct()
{
try {
$this->connect = new PDO("mysql:host=" . $_ENV["DB_HOST"] . ";dbname=" . $_ENV["DB_NAME"] . ";", $_ENV["DB_USER"], $_ENV["DB_PASSWORD"]);
$this->connect->exec("set names utf8");
}catch (PDOException $e) {
echo "Произошла ошибка следующего типа: " . $e->getMessage();
}
}

public function query(string $sql) : array
{
$query = $this->connect->query($sql);
return $query->fetchAll(PDO::FETCH_CLASS);
}

public function execute(string $sql, ?array $arguments) : array
{
$query = $this->connect->prepare($sql);
$query->execute($arguments);
return $query->fetch(PDO::FETCH_ASSOC);
}
}
Голосование за лучший ответ
Constantine Мыслитель (9723) 2 года назад
Вероятно, $this->connect->query($sql) вернул false, имеющий тип bool, а вы не проверили этого. Вот php и говорит, что нет у типа bool метода fetchAll.
Danila KhasanovУченик (130) 2 года назад
Спасибо, это я понял, а почему возвращается false, как это исправить?
Constantine Мыслитель (9723) Danila Khasanov, откуда ж я знаю? Выводите в случае неудачи информацию об ошибке, а заодно содержимое переменной $sql, и увидите. А если будет что-то неясно, кидайте сюда этот вывод. Ещё можно настроить выбрасывание исключения в случае ошибки. Тогда вместо анализа кода возврата в if надо использовать try/catch, остальное - аналогично.
Похожие вопросы