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

Ele*_*ryk 24 php pdo object

我正在使用PDO编写自己的ORM.我的问题是你是否可以强制PDOStatement::fetchAll()方法返回stdClass的对象数组?例如:

$result = $q->fetch_all(/* some magic here */);
print_r($result);
Run Code Online (Sandbox Code Playgroud)

应该打印像:

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

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

)
Run Code Online (Sandbox Code Playgroud)

这是真的吗?NAME和COLOR当然是列的名称.我阅读文档,但我没有发现任何有趣的东西.

小智 54

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

  • PDO :: FETCH_OBJ记录在[PDOStatement :: fetch](http://php.net/manual/en/pdostatement.fetch.php)中,未在[PDOStatement :: fetchAll]中提及(http://php.net /manual/en/pdostatement.fetchall.php)这可能会增加混乱. (5认同)

vim*_*ist 10

这样做:

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

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

然而,更酷的方法是让PDO实例化您自己的类并为您填充属性:

Example#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
 ?>
Run Code Online (Sandbox Code Playgroud)

资料来源:http://www.php.net/manual/en/pdostatement.fetchall.php