web-dev-qa-db-fra.com

Comment forcer PDOStatement-> fetchAll à renvoyer un tableau d'objets?

J'écris mon propre ORM simplement en utilisant PDO. Ma question est de savoir si vous pouvez forcer la méthode PDOStatement::fetchAll() à renvoyer un tableau d'objets de stdClass? Par exemple:

$result = $q->fetch_all(/* some magic here */);
print_r($result);

Devrait imprimer quelque chose comme:

Array
(
    [0] => stdClass Object
        (
            [NAME] => pear
            [COLOUR] => green
        )

    [1] => stdClass Object
        (
            [NAME] => watermelon
            [COLOUR] => pink
        )

)

Est-ce que c'est possible? NAME et COLOR sont bien sûr des noms de colonnes. J'ai lu la documentation mais je n'ai rien trouvé d'intéressant.

23
Elektryk

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

50
user862010

Cela va le faire:

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

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

Cependant, le moyen le plus cool consiste à faire en sorte que PDO instancie votre propre classe et remplisse les propriétés pour vous:

Exemple # 4 Instanciation d'une classe pour chaque résultat

L'exemple suivant illustre le comportement du style d'extraction 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
 ?>

Source: http://www.php.net/manual/en/pdostatement.fetchall.php

9
vimist

Vous devriez aussi pouvoir faire ce qui suit:

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

Avec toute requête fetch ultérieure, vous pouvez omettre de spécifier explicitement le mode.

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