私は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はもちろん列の名前です。ドキュメントを読みましたが、興味深いものは何も見つかりませんでした。
$result = $q->fetchAll(PDO::FETCH_OBJ);
を使用します
これはそれを行います:
<?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
?>
また、次のことができるはずです。
$stmt->setFetchMode(PDO::FETCH_OBJ); //set the mode for all fetch request
後続のfetch
要求では、モードを明示的に指定することを省略できます。
$stmt->setFetchAll(); //returns an array of objects