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

5us2dqdw  于 2023-04-04  发布在  PHP
关注(0)|答案(4)|浏览(101)

我正在用PDO写我自己的simply 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和COLOUR当然是列的名称。我读了文档,但我没有发现任何有趣的东西。

pkmbmrz7

pkmbmrz71#

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

gwbalxhn

gwbalxhn2#

这将做到这一点:

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

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

然而,更酷的方法是让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
 ?>

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

vjrehmav

vjrehmav3#

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

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

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

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

o75abkj44#

通过在连接字符串的末尾添加数组参数,将默认模式设置为object,

PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ

 $conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD, array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ));

那么就不需要魔法了,你可以从下面得到预期的结果:

$result = $q->fetchAll();

相关问题