如何强制PDOStatement-> fetchAll返回对象数组?

时间:2011-12-03 20:13:48

标签: php object pdo

我正在使用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
        )

)
这是真的吗? NAME和COLOR当然是列的名称。我阅读了文档,但没有找到任何有趣的内容。

3 个答案:

答案 0 :(得分:53)

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

答案 1 :(得分:10)

这样做:

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

答案 2 :(得分:0)

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

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

对于任何后续fetch请求,您可以省略明确指定模式。

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