web-dev-qa-db-ja.com

PDOStatement-> fetchAllがオブジェクトの配列を返すように強制する方法は?

私は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はもちろん列の名前です。ドキュメントを読みましたが、興味深いものは何も見つかりませんでした。

25
Elektryk

$result = $q->fetchAll(PDO::FETCH_OBJ);を使用します

55
user862010

これはそれを行います:

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

10
vimist

また、次のことができるはずです。

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

後続のfetch要求では、モードを明示的に指定することを省略できます。

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