2011-12-03 25 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

我不認爲你閱讀文檔不夠清楚:「PDO :: FETCH_OBJ:返回與對應於列名的屬性名稱的匿名對象在結果返回設置爲「 –

回答

44

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

+1

哦,我的。我在文檔中錯過了這個。我認爲這只是關於第一層(我的例子中的數組)。謝謝。 – Elektryk

+1

什麼也沒有,但PDO有幾種模式,甚至可以定義一個定義爲getters的對象的名稱,請參閱PDO :: FETCH_CLASS – 2011-12-03 20:18:26

+1

這是一個很好的習慣,它演示一個文檔化的功能,例如函數參數的標誌以添加鏈接到提到此標誌的文檔頁面,或者複製並粘貼文檔本身的必要位。 –

0

你也應該能夠做到以下幾點:

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

對於任何後續fetch要求,您可以省略明確指定模式。

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

這將做到這一點:

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