Подтвердить что ты не робот

Как заставить PDOStatement-> fetchAll вернуть массив объектов?

Я пишу свой собственный ORM, используя PDO. Мой вопрос в том, можно ли заставить метод PDOStatement::fetchAll() возвращать массив объектов stdClass? Например:

$result = $q->fetch_all(/* some magic here */);
print_r($result);

Должен напечатать что-то вроде:

Array
(
    [0] => stdClass Object
        (
            [NAME] => pear
            [COLOUR] => green
        )

    [1] => stdClass Object
        (
            [NAME] => watermelon
            [COLOUR] => pink
        )

)

Это возможно? NAME и COLOR - это, конечно, имена столбцов. Я читал документацию, но я не нашел ничего интересного.

4b9b3361

Ответ 1

Используйте $result = $q->fetchAll(PDO::FETCH_OBJ);

Ответ 2

Это будет сделано:

 <?php
 $sth = $dbh->prepare("SELECT name, colour FROM fruit");
 $sth->execute();

 $result = $q->fetchAll(PDO::FETCH_OBJ);
 //$result contains an array of stdObjects
 ?>

Однако даже более холодный способ состоит в том, чтобы заставить PDO создать свой собственный класс и заполнить ваши свойства:

Пример # 4 Создание экземпляра класса для каждого результата

В следующем примере демонстрируется поведение PDO:: FETCH_CLASS.

 <?php
 class fruit {
     public $name;
     public $colour;
 }

 $sth = $dbh->prepare("SELECT name, colour FROM fruit");
 $sth->execute();

 $result = $sth->fetchAll(PDO::FETCH_CLASS, "fruit");
 //$result contains an array of fruit objects
 ?>

Источник: http://www.php.net/manual/en/pdostatement.fetchall.php

Ответ 3

Вы также должны сделать следующее:

$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request

С любым последующим запросом fetch вы можете явно опустить режим.

$stmt->setFetchAll(); //returns an array of objects