Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2011, 09h12   #1
Nouveau Membre du Club
 
Développeur informatique
Inscription : mars 2010
Messages : 139
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2010
Messages : 139
Points : 37
Points : 37
Par défaut problème fonction query()

Bonjours,

Lorsque je souhaite recupérer le contenu de ma table sur mon site il me retourne cette erreur :
Citation:
Fatal error: Cannot use object of type PDOStatement as array in /home/vol7/hebergratuit.com/rober_9161677/htdocs/mon_menu.class.php on line 28
Je ne voit pas d'ou le problème vient je vous met la classe ou le probleme se pose :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php
include_once('connexion_base.php');
 
class Menu
{
 
	private $connexion;	
        private $menuPrincipal;
 
	public function __construct()
	{
 
	    $this->connexion = new ConnexionBase();
            $this->menuPrincipal = array();
 
	}
 
        public function menuPrincipal()
        {               
	    $this->menuPrincipal = $this->connexion->query('SELECT * FROM Menu');
        }
        public function afficherElementMenuPrincipal()
        {
            $i= 0;
            while($this->connexion = $this->menuPrincipal->fetch())
            {
	        echo $this->menuPrincipal[$i];
                $i = $i+1;
            }
        }
}
?>
pour plus de clarté je met la classe se connectant à la base de données :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
<?php
 
class ConnexionBase
{
    //attribut permettant la connexion à une base de donnée.
    private $connexion;
 
    public function __construct()
    {
 
        try
        {
	    $PDO_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
            $this->connexion = new PDO('mysql:host=sql211.hebergratuit.com;dbname=rober_9161677_tikal','rober_9161677','bleach1988',$PDO_options);
        }
        catch(Exception $e)
        {
 
            echo "Erreur de connexion :".$e->getMessage();
 
        }
 
    }
 
    public function getConnexion()
    {
	return $this->connexion;
    }
}
 
?>
dharkan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2011, 11h09   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Houlà, je me permets une question mais est-ce que tu comprends ce que tu fais ?
A la construction du poses
Code :
$this->connexion = new ConnexionBase();
ensuite dans la fonction afficherElementMenuPrincipal() tu dénatures $connexion en faisant :
Code :
while($this->connexion = $this->menuPrincipal->fetch())
Et tu fais de même pour $menuPrincipal qui est un tableau au départ et qui ensuite est dénaturé en PDOStatement.

Je sais que le PHP permet le typage dynamique mais faut pas non plus trop pousser le bouchon trop loin.

Voici comment faire (pour ton inspiration) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
<?php
include_once('connexion_base.php');
 
class Menu {
 
   private $connexion;   
   private $menuPrincipal = array();
 
   public function __construct() {
      $this->connexion = new ConnexionBase();
   }
 
   public function menuPrincipal() {
      // $qry est un PDOStatement
      $qry = $this->connexion->query('SELECT * FROM Menu');
      // on récupère les données du menu principal
      $this->menuPrincipal = $qry->fetchAll(PDO::FETCH_ASSOC);
   }
 
   public function afficherElementMenuPrincipal() {
      foreach($this->menuPrincipal as $menu) {
         echo $menu['libelle'];  
      }
   }
}
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 16h25   #3
Nouveau Membre du Club
 
Développeur informatique
Inscription : mars 2010
Messages : 139
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2010
Messages : 139
Points : 37
Points : 37
merci d'avoir répondu j'avait résolut le problème pour la récupération des données j'avais simplement inversé les variables du "compteur" while.

Sinon merci pour ceci :
Code :
 $this->menuPrincipal = $qry->fetchAll(PDO::FETCH_ASSOC);
qui est vachement plus pratique que de boucler pour récupérer les infos contenue dans une table et qui de plus n'omet plus le premier enregistrement de ma table.

Merci.
dharkan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h47.


 
 
 
 
Partenaires

Hébergement Web