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 :

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


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Fatal error: Call to a member function fetch() on a non-object
    EDIT 1: Je ne sais pas si le message est placé dans la bonne section, je ne sais pas si l'erreur vient de PDO ou de PHP...

    Bonjour,

    Je me forme actuellement au php et aux bdd SQL.
    Une erreur inattendue apparaît...

    Ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    	try{
    		$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'pswd');
    	}
    	catch(Exception $e) {
    		die ('Error: ' . $e->getMessage());
    	}
    	$answer = $db->query('SELECT * FROM training');
    	while ($data = $answer->fetch()) {
    		?>
    		<p>
    			<b>Title: </b> <?php echo $data['titre']; ?><br>
    			<b>Content: </b> <?php echo $data['contenu']; ?>
    		</p>
    		<?php
    	}
    	$answer->closeCursor();
    ?>
    me renvoi l'erreur suivante :
    Fatal error: Call to a member function fetch() on a non-object ... on line 9
    Donc (ligne 9) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($data = $answer->fetch()) {
    J'avoue que je suis un peu perdu là...

    Une idée ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Active les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse sabotage !

    En activant les erreurs PDO voici ce qui apparaît :

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.training' doesn't exist' in /save/alpha/Sync/Dev/web/tests/mysql_training.php:9 Stack trace: #0 /save/alpha/Sync/Dev/web/tests/mysql_training.php(9): PDO->query('SELECT * FROM t...') #1 {main} thrown in /save/alpha/Sync/Dev/web/tests/mysql_training.php on line 9
    Une stupide erreur d'inattention... J'ai indiqué une table qui n'existe plus.

    Mille pardons...

    Merci pour ton intervention !

  4. #4
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 19
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Active les erreurs PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Bonjour,

    J'ai exactement la même erreur par contre j'ai une question (en sachant que je ne suis pas du tout experte du php!) : où est-ce qu'il faudrait mettre ce code ?
    Merci par avance

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Juste après la ligne de connexion :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $db = new PDO('mysql:host=localhost;dbname=test', 'root', 'pswd');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    et si ça peut t'être utile, le jour où j'étais passé des fonctions mysql_xxx à PDO, je m'étais écrit un aide-mémoire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <?php
    //// connexion
    require('MyPdo.php');
    try{
    		$pdo = new MyPDO();
    	}
    catch(PDOException $e){
    		echo "argggggggggggggg".$e->getMessage();
    	}
     
    // MyPDO
     //la classe MyPdo hérite de la classe PDO (extends)
    class MyPdo extends PDO {
    /* on privilégie les var de classe (statiques) aux constantes : ainsi modifiables par programme */
    	static public $DB_NAME = "xxx";
     
    	static public $HOST = "xxx";
     
    	static public $USER = "xxx";
     
    	static public $PASS = "xxx";
     
     
     
    // le constructeur de MyPdo appelle le constructeur de PDO en lui passant ses paramètres	
    	function __construct() {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;//important sur les configs récentes
    	$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;//pour le mode objet
    	$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";//pour l'utf-8
     
    	parent::__construct('mysql:host=' . MyPdo::$HOST . ';dbname=' . MyPdo::$DB_NAME, MyPdo::$USER, MyPdo::$PASS, $pdo_options);
    	}
     
    }
    // fin MyPDO
     
     
    //// Effectuer une query et un fetch
    $query = 'SELECT * FROM foo WHERE bar=1;';
    $arr = $pdo->query($query)->fetch(); //Sur une même ligne ...
     
     
    //// Effectuer une query et un fetchAll
    $query = 'SELECT * FROM foo WHERE bar<10;';
    $stmt = $pdo->query($query);
    $arrAll = $stmt->fetchAll(); //... ou sur 2 lignes
     
    //// Effectuer un exec
    $query = 'DELETE FROM foo WHERE bar<10;';
    $rowCount = $pdo->exec($query);
     
    //// nb de lignes (mysql_num_rows)
    $query = 'DELETE FROM foo WHERE bar<10;';
    $rowCount = $pdo->exec($query);
    $nb_lignes=$rowCount->rowCount();
     
    // nb de lignes pour un select
    $sql='select * from `users` order by nom';
    $qid = $pdo->query($sql);
    //test de mysql_num_rows
    $num_rows=0;
    while( $ligne=$qid->fetch(PDO::FETCH_OBJ) ) $num_rows++;
    $pdo=NULL;
    echo "nb de lignes=".$num_rows;
     
    ou :
     
    $sql = "SELECT COUNT(*) AS compte FROM `infotech`";
    $qid = $pdo->query($sql);
    $row=$qid->fetch(PDO::FETCH_OBJ);
    $nrows=$row->compte;
     
     
     
    // exécuter un select puis afficher les lignes
    $sql='select * from `conf` order by lastname';
    $qid = $pdo->query($sql);
    while( $ligne=$qid->fetch(PDO::FETCH_NUM) )...
     
    // exécuter un select puis mettre les données en tableau associatif
    $sql='select * from `conf` order by lastname';
    $qid = $pdo->query($sql);
    $data = $qid->fetchAll(PDO::FETCH_ASSOC); 
    echo $data[0]["name"]; // tableau à 2 dimensions
     
    // filtrage affichage erreurs
    error_reporting(E_ALL^E_NOTICE^E_DEPRECATED);
     
    //affichage erreur PDO
    print_r(pdo->errorInfo());
     
    //requête préparée
    $query = 'DELETE FROM foo WHERE id=?';
    $qid=$pdo->prepare($query);
    $qid(execute(array($id));
     
    ou 
     
    $query = 'DELETE FROM foo WHERE (id=:id)';
    $qid=$pdo->prepare($query);
    $qid(execute(array(':id'=>$id));
    ?>
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2015
    Messages : 19
    Points : 90
    Points
    90
    Par défaut
    Merci !!!!!!!!!!!!!!!!!!!!!!!!!!

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

Discussions similaires

  1. [PDO] Fatal error: Call to a member function fetch() on a non-object
    Par nico37000 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 13/08/2014, 10h42
  2. [MySQL] Fatal error: Call to a member function fetch() on a non-object
    Par Saoualah dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/07/2014, 09h30
  3. [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
  4. [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