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

Langage PHP Discussion :

PHP Fatal error: Call to a member function fetchAll() on boolean


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut PHP Fatal error: Call to a member function fetchAll() on boolean
    Bonjour,

    J'effectue le code suivant dans mon terminal (dans un .php) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($resultats_admin as $row){
     $list_admin[] = $row['login'];
    }
    $list_admin = ( !empty($list_admin) )? implode( ',', $list_admin) : '';
     
    $parametresCompte = $bddperso->query("SELECT login, mail, state, id FROM User WHERE login NOT IN (".$list_admin.") ");
    $resultats = $parametresCompte->fetchAll();
    Le problème est qu'il me retourne l'erreur PHP Fatal error: Call to a member function fetchAll() on boolean.

    Pourtant lorsque je teste la qrequete dans phpmyadmin, j'obtiens de bons résultats...

    Je ne comprends pas.


    Cordialement

  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
    Par défaut
    Commence par activer les extensions PDO afin d'avoir l'erreur de la requête.

    $resultats_admin contient des entiers ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut Re
    Oui $resultats_admin contient des entiers et des varchar.

    En quoi un entier peut il apporter une erreur ?

    Et pourquoi la requete fonctionne dans phpmyadmin (avec la liste en dur du coup) ?

  4. #4
    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
    Par défaut
    C'est le contraire : si tu n'as pas des entiers, ça ne fonctionnera pas car il va manquer les guillemets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT login, mail, state, id FROM User WHERE login NOT IN (1,2,3,5) // ok
    SELECT login, mail, state, id FROM User WHERE login NOT IN (toto, 4 ,tutu) // pas ok
    Tu peux utiliser une requête préparée dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($resultats_admin as $row){
     $list_admin[] = $row['login'];
    }
    $sth = $bddperso->prepare("SELECT login, mail, state, id FROM User WHERE login NOT IN (" . implode(',', array_fill(0, count($params), '?')) . ")");
    $sth->execute($list_admin);
    $resultats = $sth->fetchAll();
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 15
    Par défaut re
    D'accord je comprends.

    Et bien avec une requête préparé il n'y a plus l'erreur mais rien ne se passe. Avec le errorInfo j'obtiens cette erreur : Array
    (
    [0] => 42S22
    [1] => 1054
    [2] => Unknown column 'florian.cho' in 'where clause'
    )


    Le florian.cho est le premier login de la liste. Je rajoute les guillements à la création de la liste.

    EDIT : à priori le problème est réglé grace aux guillemets rajoutés. Je continue les tests au cas où.

  6. #6
    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
    Par défaut
    Je ne sais pas ce que tu as fait mais il n'y a pas à ajouter manuellement de guillemets.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [MySQL] ( ! ) Fatal error: Call to a member function fetch() on boolean
    Par henneka dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/04/2017, 15h13
  2. Réponses: 23
    Dernier message: 26/02/2011, 12h38
  3. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20
  4. Fatal error: Call to a member function on a non-object
    Par alemat13 dans le forum Langage
    Réponses: 6
    Dernier message: 31/12/2007, 17h22
  5. Fatal error: Call to a member function fetchAll()
    Par misterniark dans le forum Zend_Db
    Réponses: 2
    Dernier message: 15/06/2006, 17h29

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