Ответ 1
Используйте $result = $q->fetchAll(PDO::FETCH_OBJ);
Я пишу свой собственный 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 - это, конечно, имена столбцов. Я читал документацию, но я не нашел ничего интересного.
Используйте $result = $q->fetchAll(PDO::FETCH_OBJ);
Это будет сделано:
<?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
Вы также должны сделать следующее:
$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request
С любым последующим запросом fetch
вы можете явно опустить режим.
$stmt->setFetchAll(); //returns an array of objects