2011-12-03 3 views
21

私はPDOを使って私自身の単純なORMを書いています。私の質問は、PDOStatement::fetchAll()メソッドがstdClassのオブジェクトの配列を返すようにすることができる場合ですか?たとえば:PDOStatement-> fetchAllがオブジェクトの配列を返すようにするには?

$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はもちろん列の名前です。私はドキュメンテーションを読んだが、興味深いものは見つけられなかった。

+0

私は、あなたが明確に十分なドキュメントを読んで考えていないカラム名に対応してプロパティ名を匿名オブジェクトを返しますが、あなたの結果に返さ" –

答えて

44

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

+1

ああ私を設定してください。私はドキュメントでこれを逃す。私はこれが最初のレベル(私の場合は配列)についてだと思っていました。ありがとう。 – Elektryk

+1

PDOには何もありませんが、PDOにはいくつかのモードがあり、getterで定義されているオブジェクトの名前を定義することもできます。PDO :: FETCH_CLASSを参照してください。 –

+1

関数引数のフラグなどの文書化された機能ドキュメントのページに必要なビットをコピーして貼り付けてください。 –

0

また、次の操作を行うことができる必要があります:あなたはモードを指定明示的に省略することができ、後続のfetch要求に

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

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

これはそれを行います。

例#4のインスタンス化を:

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

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

でもクーラーの方法は、独自のクラスをインスタンス化し、あなたのためのプロパティを設定するためにPDOを得ることです各結果のクラス

次の例では、 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 
?> 

出典:「PDO :: FETCH_OBJ:http://www.php.net/manual/en/pdostatement.fetchall.php

関連する問題