Как заставить PDOStatement-> fetchAll возвращать массив объектов? - PullRequest
24 голосов
/ 04 декабря 2011

Я пишу свой собственный просто 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
        )

)

Это возможно? ИМЯ и ЦВЕТ - это, конечно, имена столбцов. Я прочитал документацию, но ничего интересного не нашел.

Ответы [ 3 ]

54 голосов
/ 04 декабря 2011

Использование $result = $q->fetchAll(PDO::FETCH_OBJ);

10 голосов
/ 10 октября 2013

Это сделает это:

 <?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

0 голосов
/ 06 июля 2013

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

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

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

$stmt->setFetchAll(); //returns an array of objects
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...