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

  1. #1
    Membre à l'essai
    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
    Points : 11
    Points
    11
    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
    Points : 44 155
    Points
    44 155
    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 à l'essai
    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
    Points : 11
    Points
    11
    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
    Points : 44 155
    Points
    44 155
    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 à l'essai
    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
    Points : 11
    Points
    11
    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
    Points : 44 155
    Points
    44 155
    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

  7. #7
    Membre à l'essai
    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
    Points : 11
    Points
    11
    Par défaut
    Et bien apparemment les login de ma listes etaient reconnus comme des colonnes alors que ce sont juste des chaines de caractères, j'ai donc modifié la liste pour qu'elle soit sur le modèle "prenom1.nom1","prenom2.nom2"...

  8. #8
    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
    Si tu utilises une requête préparée, il ne peut pas y avoir de confusion entre les noms de colonnes et les valeurs, et il n'y a donc pas besoin d'ajouter des 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