Php 如何强制执行PDO语句->;fetchAll返回对象数组?

Php 如何强制执行PDO语句->;fetchAll返回对象数组?,php,object,pdo,Php,Object,Pdo,我正在使用PDO编写自己的ORM。我的问题是,是否可以强制PDOStatement::fetchAll()方法返回stdClass的对象数组?例如: $result = $q->fetch_all(/* some magic here */); print_r($result); 应该打印如下内容: Array ( [0] => stdClass Object ( [NAME] => pear [COLO

我正在使用PDO编写自己的ORM。我的问题是,是否可以强制
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
        )

)

这可能吗?名称和颜色当然是列的名称。我阅读了文档,但没有发现任何有趣的东西。

使用
$result=$q->fetchAll(PDO::FETCH_OBJ)

您还应该能够执行以下操作:

$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request
对于任何后续的
fetch
请求,您可以忽略显式指定模式

$stmt->setFetchAll(); //returns an array of objects
这可以做到:

 <?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_类获取样式



来源:

哦,天哪。我在文档中遗漏了这一点。我认为这只是关于第一级(在我的例子中是数组)。谢谢。没有什么,但是PDO有几种模式,甚至定义一个对象的名称,这个对象是由getter定义的,参见PDO::FETCH_CLASSIt是一个很好的实践,它演示了一个有文档记录的功能,例如函数参数的标志,以添加指向文档页面的链接,该链接提到该标志,或者复制并粘贴文档本身所需的位。PDO::FETCH_OBJ在中有文档记录,但在中没有提及,这可能会增加混淆。在我的在PHP5.6中使用
PDO::FETCH_类
fetchAll返回对象数组,在PHP5.4中使用数组数组。这也造成了混乱。是否有php.ini设置可以修改它?我认为您没有足够清楚地阅读文档:“PDO::FETCH_OBJ:返回一个匿名对象,其属性名与结果集中返回的列名相对应”
 <?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
 ?>