2009-04-14 6 views
3

Essayer le PDO pour la première fois.Comment puis-je simplement retourner des objets dans 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; 
} 

Si je sauter la méthode setFetchMode(), alors je dois appeler $animals["name"] que je ne veux pas.

Mais je ne veux pas appeler le setFetchMode() pour chaque requête que je fais.

Existe-t-il un moyen de définir le FetchMode par défaut? Ou une autre méthode pour rendre les objets query() avec un paramètre global.

Répondre

6

Peut-être que vous pourriez essayer étendre la classe PDO pour appeler automatiquement la fonction pour vous ... en bref:

 
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

Je pensais à ça mais je voulais chercher quelque chose b Merci pour :) Merci. +1 –

2

Depuis PDO aurait besoin de savoir ce que objet que vous souhaitez chercher dans, vous devez spécifiez-le manuellement. Mais de vous voulez juste utiliser l'objet pour récupérer les données plutôt qu'un tableau et ne vous souciez pas si ce n'est pas un objet animal, vous pouvez utiliser des objets anonymes par défaut lorsque vous définissez l'attribut après la chaîne de connexion qui pourrait être fait un constructeur encapsulé

Ensuite, toutes les requêtes renverront des objets. Bien que ce ne soit pas exactement ce que vous voulez.


Vous pouvez également injecter les données dans votre classe animale:

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

Si vous regardez la fonction de requête, il est possible de modifier certaines options en passant des paramètres supplémentaires: http://www.php.net/manual/en/pdo.query.php Je ne l'ai pas testé mais on dirait que ça vous rapproche de ce que vous voulez