IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Call to a member function fetch() on a non-object [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut Call to a member function fetch() on a non-object
    Salut ! J'ai besoin d'aide svp. J'ai une fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getAll() {
    	$pharmas = array();
     
    	$query = $this->_db->exec('SELECT * FROM pharmacies');
     
    	while ($data = $query->fetch(PDO::FETCH_ASSOC)) {
    		$pharmas[] = new Pharmacy($data);
    	}
     
    	return $pharmas;
    }
    Quand je l'appelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pharmas = $manager->getAll();
    J'ai une erreur du type:
    Fatal error: Call to a member function fetch() on a non-object
    Voici l'objet _db
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $db = new PDO('mysql:host=localhost;dbname=pharma', 'root', '');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    J'ai besoin d'aide la communauté. Merci !!!

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Suffit pas de déclarer le mode exception, encore faut-il utiliser des bloc try/catch pour intercepter l'exception, pour la connexion et pour les requêtes.

    En l'occurrence ici il semble que tu aies une erreur dans ta requête puisque $query ne retourne pas un objet. Utilise des blocs try/catch pour avoir plus d'information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    {
    	$pharmas = $manager->getAll();
    }
    catch (PDOException  $e)
    {
    	echo $e->getMessage();
    }
    et de même pour ta connexion.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
    {
            $db = new PDO('mysql:host=localhost;dbname=pharma', 'root', '');
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException  $e)
    {
    	echo $e->getMessage();
    }

  3. #3
    Membre à l'essai

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut
    Toujours rien. Quand je rentre la requete
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM pharmacies;
    dans la console MySql, les champs sont affichés

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 382
    Points : 10 410
    Points
    10 410
    Par défaut
    Tu teste en local ou sur un serveur distant ?

    Normalement en local les erreurs php sont affichées par défaut. Sinon tu peux faire afficher les erreurs avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    mais le mieux est de configurer le php ini pour ne pas avoir à mettre ces lignes en début de chaque script.

    Pourquoi le underscore dans $this->_db->exec ?

  5. #5
    Membre à l'essai

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut
    C'est ma variable

  6. #6
    Membre à l'essai

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 11
    Points : 20
    Points
    20
    Billets dans le blog
    1
    Par défaut
    Je viens de revoir la doc PDO::exec() et voila ce que j'ai trouver
    PDO::exec() ne retourne pas de résultat pour une requête SELECT. Pour une requête SELECT dont vous auriez besoin une seule fois dans le programme, utilisez plutôt la fonction PDO::query(). Pour une requête dont vous auriez besoin plusieurs fois, préparez un objet PDOStatement avec la fonction PDO::prepare() et exécutez la requête avec la fonction PDOStatement::execute().
    Et j'ai modifier ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function getAll() {
    	$products = array();
     
    	$query = $this->_db->query('SELECT * FROM products') or die(print_r($this->_db->errorInfo(), TRUE));
     
    	while ($data = $query->fetch(PDO::FETCH_ASSOC)) {
    		$products[] = new Product($data);
    	}
     
    	return $products;
    }
    ça marche. Merci ABCIWEB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problème de INNER JOIN + Call to a member function fetch() on a non-object in
    Par jlee_xxx dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/03/2012, 11h15
  2. [MySQL] Fatal error: Call to a member function fetch() on a non-object
    Par tonnebrre dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/10/2011, 12h46
  3. [SQL-Server] Call to a member function fetch() on a non-object
    Par geo54 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/05/2010, 23h05
  4. [PDO] Erreur PDO : Call to a member function fetch() on a non-object
    Par numerodix dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 01/03/2010, 17h37
  5. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par blopjerem dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/12/2009, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo