@AFI19

Object of class PDOStatement could not be converted to string in как исправить?

Добрый день! Пытаюсь перепелить подключение БД с mysqli на PDO, на данном этапе вылазит ошибка. Помогите понять в чем проблема.

Ошибка пропала, но запросы не выполняються.
P.S. Заранее спасибо.
class DB {

    protected $connection;

    public function __construct($host, $user, $password, $db_name){
        //$this->connection = new mysqli($host, $user, $password, $db_name);
        $this->connection = new PDO('mysql:dbname=news_db;host=localhost', $user, $password);
        /*if( mysqli_connect_error() ){
            throw new Exception('Could not connect to DB');
        }*/
        try {
            $dbh = $this->connection;
        } catch (PDOException $e) {
            echo 'Подключение не удалось: ' . $e->getMessage();
        }
    }

    public function query($sql){
        if ( !$this->connection ){
            return false;
        }

        $result = $this->connection->query($sql);

        /*if ( mysqli_error($this->connection) ){
            throw new Exception(mysqli_error($this->connection));
        }*/

        if ( is_bool($result) ){
            return $result;
        }

        $data = [];
        /*while( $row = mysqli_fetch_assoc($result) ){
            $data[] = $row;
        }*/
        while ($row = $result->fetchAll(PDO::FETCH_ASSOC)) {
            $data[] = $row;
        }
        return $data;
    }

    public function escape($str) {
        //return mysqli_escape_string($this->connection, $str);
        return $this->connection->quote($str);
    }
}

Запрос
public function getByAlias($alias){
        $alias = $this->db->escape($alias);
        $sql = "select * from pages where alias = '{$alias}' limit 1";  // ошибка здесь или ранее
        $result = $this->db->query($sql);
        return isset($result[0]) ? $result[0] : null;
    }

Класс модели, может понадобится
class Model
{

    protected $db;

    public function __construct()
    {
        $this->db = App::$db;
    }
}
  • Вопрос задан
  • 2338 просмотров
Пригласить эксперта
Ответы на вопрос 2
janson
@janson
PHP-разработчик
Ну вам же наверняка не только текст ошибки прилетел, но и указание, где оно произошло.

...
$result = $this->db->query($sql);
return isset($result[0]) ? $result[0] : null;
...


Конкретно ошибка "Object of class PDOStatement could not be converted to string" у вас возникает здесь.
В $result у вас после выполнения query() будет лежать объект PDOStatement. Чтобы получить из него результат, вам нужно выполнить
$result->fetchAll();

Или так:
...
$result = $this->db->query($sql)->fetchAll();
return isset($result[0]) ? $result[0] : null;
...
Ответ написан
@shagguboy
ты хоть скажи на каком месте это возникает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы