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

PHP & Base de données Discussion :

incompréhension PDO execute -> fetch [PDO]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut incompréhension PDO execute -> fetch
    Bonjour,

    Je souhaites de coder une fonction qui vérifie en base de donnée si le pseudo est déjà utilisé.
    je passe par une class getDB pour faire ma connexion à la DB et après je fais mes instructions conditionnelles pour les différents cas d'utilisation (query ou prepare et avec 1 ou plusieurs résultats)
    sauf que quand je souhaites faire le fetch() après le execute () .il me murmure :
    Fatal error: Call to a member function fetch() on a non-object in /volume1/web/Database/MysqlDatabase.php on line 38
    alors que lorsque je fais un var dump() sur la variable juste avant le execute() il me confirme que c'est bien un objet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    object(PDOStatement)#7 (1) {
      ["queryString"]=>
      string(49) "SELECT * FROM users WHERE username= :username"
    }
    et même quand je mets le code en dur il me répète:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fatal error: Call to a member function fetch() on a non-object in /volume1/web/Database/MysqlDatabase.php on line 38
    voici le code en dur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function query($statement, $params=false, $fetch=null){
            $req = $this->getPDO()->prepare("SELECT * FROM users WHERE username= :username");
            $req->bindParam(':username', '3ym3r1c', PDO::PARAM_STR);
                // echo "<pre>";
                // var_dump($req);
                // echo "</pre>";
                // die();
            $req->execute()->fetch();
    Voilà mon problème!
    Si vous avez des idées sur l'erreur débile que j'ai certainement dû faire, je suis preneur.
    Merci

  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
    Est-ce que les erreurs PDO sont bien actives sur ta connexion ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    execute retourne un booléen, pas une ressource :
    Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.
    PDOStatement::execute

    Tu ne peux donc pas faire directement $req->execute()->fetch();. Il faut décomposer en deux lignes (et accessoirement exploiter le résultat) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $res = $req->execute();
    if ($res !== false) {
        $data = $req->fetch();
        var_dump($data);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut
    Merci Celira pour ta réponse.

    Effectivement faut le faire en 2 temps, du coup je me suis fais avoir parce que sur les query() je le fais à la chaîne et je n'étais pas tombé sur le cas où le query() return false vu que je lui demande des données dont je suis sûre qu'elles existent.
    Encore Merci
    Problème résolu!

  5. #5
    Membre averti
    Homme Profil pro
    autre
    Inscrit en
    Mai 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Mai 2016
    Messages : 12
    Par défaut les erreurs PDO
    Citation Envoyé par sabotage Voir le message
    Est-ce que les erreurs PDO sont bien actives sur ta connexion ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    tout d'abord merci d'avoir répondu.
    oui j'ai bien activé les PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] Eviter d'exécuter 2 fois de suite la méthode PDO execute
    Par laurentSc dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 17/11/2014, 09h50
  2. Erreur incompréhensible à l'execution
    Par Nebulix dans le forum Langage
    Réponses: 11
    Dernier message: 02/08/2011, 10h28
  3. [PDO] PDO OCI et fetch
    Par maxidoudou dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/08/2008, 14h56
  4. Erreur d'execution incompréhensible
    Par EvaristeGaloisBis dans le forum VBA Access
    Réponses: 4
    Dernier message: 14/03/2007, 11h12
  5. [Conception] Methode execute de PDO
    Par Yoshio dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/08/2006, 22h17

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