[RESOLU] Requete SQL ok, code PHP en erreur : Fatal error: Call to a member function fetch() on boolean

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Requete SQL ok, code PHP en erreur : Fatal error: Call to a member function fetch() on boolean

Re: Requete SQL ok, code PHP en erreur : Fatal error: Call to a member function fetch() on boolean

par stomper98 » 27 sept. 2016, 11:54

Effectivement :oops: c'était tout bête

Pour la variable $page c'est normal il manquait une partie du code

Merci à toi

Re: Requete SQL ok, code PHP en erreur : Fatal error: Call to a member function fetch() on boolean

par moogli » 27 sept. 2016, 10:41

salut,

$response est un booleen car execute ne retourne qu'un booleen http://php.net/manual/fr/pdostatement.execute.php.
Cela te permet de regarder si tu as une erreur et avoir le message avec $requete->errorInfo() (http://php.net/manual/fr/pdostatement.errorinfo.php)

Dans ton cas la requête peu ce faire correctement mais derrière php a raison $response est un booleen c'esy $requete (qui est un objet PDOStatement) qui contient la méthode fetch ;)
while ($donnees = $requete->fetch()) {
// ...
}
la variable $page n'existe pas et donc doit indiquer une erreur. (dans le code indiqué)

sinon j'utiliserais une jointure normalisée pour écrire la requête je ne vois que
SELECT SQL_CALC_FOUND_ROWS ID_DEPARTEMENT, ID_REGION, NOM_DEPARTEMENT, NOM_REGION
    FROM departement, region
    join region on departement.REGION=region.ID_REGION
    ORDER BY NOM_DEPARTEMENT LIMIT :limite, OFFSET :debut

@+

Requete SQL ok, code PHP en erreur : Fatal error: Call to a member function fetch() on boolean

par stomper98 » 27 sept. 2016, 09:50

Bonjour,

Je me permets de vous solliciter pour une erreur fréquente qui généralement indique une requête SQL erronée, hors ici la requête est bonne quand je l'a teste dans MYSQL. Je précise que c'est depuis que je suis passé en requête préparée que je rencontre le problème

Voici mon code :
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=bddtest;charset=utf8', 'root', '');
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
}
catch (Exception $e)
{
	die('Erreur : <b>' . $e->getLine() .' :</b> '. $e->getMessage());
}

$requete = 'SELECT SQL_CALC_FOUND_ROWS ID_DEPARTEMENT, ID_REGION, NOM_DEPARTEMENT, NOM_REGION
		FROM departement, region
		WHERE departement.REGION=region.ID_REGION
                ORDER BY NOM_DEPARTEMENT LIMIT :limite, OFFSET :debut ';

$limite = 30;
$debut = ($page - 1) * $limite;
		
$requete = $bdd->prepare($requete);
$requete->bindValue(':debut', $debut, PDO::PARAM_INT);
$requete->bindValue(':limite', $limite, PDO::PARAM_INT);
$reponse = $requete->execute();
		
//récupération quantité 
$reponsecount = $bdd->query('SELECT found_rows()');
$nombredElementsTotal = $reponsecount->fetchColumn();

while ($donnees = $reponse->fetch()) {
// affiche erreur à la ligne ci-dessus -> Fatal error: Call to a member function fetch() on boolean
}
Je pense qu'il s'agit d'une erreur dans mon code mais j'avoue ne pas comprendre d'où ça vient #-o