2009-04-14 29 views
3

第一次試用PDO。如何簡單地返回PDO中的對象?

$dbh = new PDO("mysql:host=$hostname;dbname=animals", $username, $password); 

$stmt = $dbh->query("SELECT * FROM animals"); 
$stmt->setFetchMode(PDO::FETCH_INTO, new animals); 

foreach($stmt as $animals) 
{ 
    echo $animals->name; 
} 

如果我跳過setFetchMode()方法,然後我需要調用$animals["name"]我不想要的。我不想爲每個查詢調用setFetchMode()

有沒有辦法設置默認的FetchMode?或者使其它方法使query()返回具有一個全局設置的對象。

回答

6

或許你可以嘗試擴展PDO類自動調用該函數你...應有盡有:

 
class myPDO extends PDO 
{ 
    function animalQuery($sql) 
    { 
    $result = parent::query($sql); 
    $result->setFetchMode(PDO::FETCH_INTO, new animals); 
    return $result; 
    } 

// // useful if you have different classes 
// function vegetableQuery($sql) 
// { 
//  $result = parent::query($sql); 
//  $result->setFetchMode(PDO::FETCH_INTO, new vegetables); 
//  return $result; 
// } 
} 

$dbh = new myPDO("mysql:host=$hostname;dbname=animals", $username, $password); 

$stmt = $dbh->animalQuery("SELECT * FROM animals"); 

foreach($stmt as $animals) 
{ 
    echo $animals->name; 
} 
+0

我有這個想法,但想尋找的東西b uilt in :)謝謝。 +1 – 2009-04-14 15:37:28

2

由於PDO需要知道你想獲取成什麼樣的對象,你需要手動指定它。 但是你只是想使用對象來檢索數據而不是數組,並且不關心它不是動物對象,當你在可以完成的連接字符串之後設置屬性時,可以默認使用匿名對象包裝的構造函數

$connection = new PDO($connection_string); 
    //PDO::FETCH_OBJ: returns an anonymous object with property names that correspond to the column names returned in your result set 
    $connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 

然後所有查詢都會返回對象。雖然它不完全是你想要的。


您也可以將數據注入到你的動物類:

while($dataObj = ...) { 
$animal = new Animal($dataObj); 
} 

如果你看一下查詢功能,可以通過傳遞額外的參數來改變一些選項: http://www.php.net/manual/en/pdo.query.php 我沒有測試它,但它看起來像它讓你接近你想要的