Probleme PDO

Signaler
Messages postés
3
Date d'inscription
vendredi 2 juin 2006
Statut
Membre
Dernière intervention
13 juin 2006
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Bonjour à tous :

je viens de créer une classe extends PDO.

Elle a une méthode de connexion qui fait appelle a PDO ainsi que toutes les autres méthodes que je ne vous détaillerai pas.

mon souci vient d'un script que je veux faire et qui est tout simple,
imbriquer 2 requetes, et c'est la que je pense voir la limite de PDO.

Il faut recréer un objet PDO ( et donc refaire la connexion à la base
de données puisque que l'objet PDO se construit qu'à partir d'une
connexion à une base) à chaque nouvelle requete select .


mon script:
$data = new Sql();

$data->connexion($localhost);

      

    $sql = 'select * from options';

    $sql1= 'select * from magasins';

   

    // Ici je tente avec le meme data de créer un autre conteneur $resultat1 de resultat pour ne pas recréer de $data

    $resultat     = $data->query($sql);

    $resultat1     = $data->query($sql1);

   

    $resultat->setFetchMode(PDO::FETCH_OBJ);

   

    // j'imbrique mes 2 requetes

    while ($ligne = $resultat->fetch()){

        while ($ligne2 = $resultat1->fetch()){

            echo 'option :'.$ligne->nom_option.'
'.$ligne2->nom_magasin;

        }

    }

Erreur indiquée :

Fatal error: Call to a member function fetch() on a non-object :

--> je pense que cela veut dire que je ne peut faire le fetch sur
$ligne2 car il faut créer un nouvel objet Sql chose que je ne veux pas
faire .

PDO serat-il deja limité ??? je ne pense pas,

j'aurais juste besoin d'aide pour savoir commen imbriquer 2 voire plusieurs requetes type select

3 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

le problème vient de la classe.
Je suppose que tu stockes la ressource renvoyée par un Sql::query () dans une propriété membre, et que c'est cette ressource qui est utilisé dans Sql::fetch() (vu que tu ne passes pas la ressource en argument, j'en déduis qu'elle a été stockée dans l'objet).
 Du coup, à ton avis, il se passe quoi ?
Mettons que la propriété soit : Sql::link.
Ben :
   $resultat     = $data->query($sql);
// ici, $date -> link === $data -> query ($sql), c'est à dire la ressource renvoyée par cette requête.
    $resultat1     = $data->query($sql1);
// et ici...tu l'écrases, avec la ressource renvoyée par cette requête. Donc, la ressource renvoyée par la 1ère requête n'existe plus. Normal.
Messages postés
3
Date d'inscription
vendredi 2 juin 2006
Statut
Membre
Dernière intervention
13 juin 2006

le souci ne vient pas de la
car mes méthodes query et fetch sont les méthodes de base de PDO ...donc je ne stocke nulle part la ressource de query
c 'est gentil de repondre en tout cas
aurais-tu (auriez vous ) un exemple de plusieurs requetes imbriquées en utilisant PDO ?
je n'ai vu aucune application de cela
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
sauf que la classe PDO de php s'appelle...PDO? pas Sql.
Donc, tu passes bien par une classe interméfdiaire.