Fatal error : function fetch() on a non-object in C

Djess
Invité n'ayant pas de compte PHPfrance

05 juin 2013, 11:56

Bonjours à tous j'espère que vous pourriez m'aider je suis entrain de faire une application prise de rendez vous et je bloque sur ma fonction recherche qui permet de déterminer à qu'elle heure un rendez vous n'est pas pris ,
en effet lorsque j'execute mon code ce message d'erreur apparait "Fatal error: Call to a member function fetch() on a non-object in C". J'ai chercher en vain une solution quelqu'un aurait - il une idée?
Voici mon code :
<?php 


	//connexion à la base
	$bdd= new PDO('mysql:host=localhost;dbname=rdv','root','');
	
	//la requete
	
	
	$MaxJour = '30'; 
	$Frequence = '1'; 
	$sortie = '0';
	$jour = date ("Y/m/d");
	$heure = date ("H");
	
	try{
	$reponse = $bdd->query("select * from personne WHERE DateR >".$jour."
							AND HeureH >".$heure." ORDER BYE DateR,HeureH ASC");
							
	
	}catch(PDOExeception $e){
		echo 'Echec lors de la connexion :' .$e->getMessage();
	}
	
		while($donnees=$reponse->fetch(PDO::FETCH_OBJ)){
			
				while($RdvAnt + $Frequence != $donnees['HeureH']){
				
						if($RdvAnt + $Frequence != $donnees['HeureH']){
							$MonRDV = $RdvAnt + $Frequence;
							echo $MonRDV;
						}
						$RdvAnt = $MonRDV;
						if($RdvAnt == '18'){
							$Rdvant = '7';
						}
						
						
					$sortie++;	
					if($sortie == '10'){
					exit;
					}
				
				}		
			if ($sortie == '10'){
			exit;
			}
			
		}

		$ajout=$bdd->exec($req);
	
		$connexion=NULL;
			 	
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 juin 2013, 14:38

Modération :
Afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ


salut,


tous le code doit être dans le try, tu pourra y attraper toute erreur.
Il faut toujours vérifier le retour de query, car il peux ne pas lever d'exception et retourner false.

Dans ton cas la requête est foireuse, on ordonne BY et non pas BYE.
du coup tu as une erreur, qui tu ne gère pas, et tu essais d'utiliser une méthode qui s'appel fetch sur un booléen (false ici).

Quand reste du code, tu demande tes données sous la forme d'objet (PDO::FETCH_OBJ) alors que tu utilise un tableau ....

Pour la dernière requête $req n'existe pas ....

pour info un message d'erreur contient un numéro de ligne c'est assez pratique pour les gens qui essai de t'aider pour trouver rapidement le code en cause.

dernière chose, si la variable sortie ne sert qu'a t'assurer que tu ne va traiter que 10 résultats, autant utiliser la clause LIMIT de mysql tu ne va demander une requête sur 4 millions de lignes pour en utiliser 10 :mrgreen:

ton code pourrait être ainsi.
<?php 
try {
    $reponse = $bdd->query("select * from personne WHERE DateR >" . $jour . " AND HeureH >" . $heure . " ORDER BY DateR,HeureH ASC");
    if ($reponse !== false) {
        while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) {

            while ($RdvAnt + $Frequence != $donnees['HeureH']) {

                if ($RdvAnt + $Frequence != $donnees['HeureH']) {
                    $MonRDV = $RdvAnt + $Frequence;
                    echo $MonRDV;
                }
                $RdvAnt = $MonRDV;
                if ($RdvAnt == '18') {
                    $Rdvant = '7';
                }


                $sortie++;
                if ($sortie == '10') {
                    exit;
                }

            }.
            if ($sortie == '10') {
                exit;
            }

        }

        $ajout = $bdd->exec($req);
    } else {
        $err = $bdd->errorInfo();
        throw new Exception($err[2]);
    }
    $connexion = NULL;

} catch (Exception $e) {
    echo 'Erreur SQL :' . $e->getMessage();
}                 
?>
Il en faut peu pour être heureux ......