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

Eléphant du PHP | 54 Messages

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

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

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

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 54 Messages

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