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 :

Probleme requete PDO depuis une fonction PHP


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut Probleme requete PDO depuis une fonction PHP
    Bonjour,

    problème que j'avoue ne pas trop savoir comment qualifier...

    - J'ai une page standard (index.php).
    - Dans dans cette page j'ai une fonction php "get_infomrations()" qui prend en paramètre un id.
    - Dans cette fonction, je lance une requête PDO select standard (que j'ai tester hors fonction et qui fonctionne parfaitement).

    Lorsque je lance mon script, il me dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Fatal error: Call to a member function query() on a non-object in ------- on line ---
    - J'ai fait afficher ma requête et testé dans mySql, ça fonctionne, elle est bonne.
    - Lorsque je met la ligne "$db = new PDO('mysql:host=localhost;dbname=-----', '----', '----');" directement dans ma fonction , cela fonctionne également.

    Mais je ne veux pas avoir à remettre à chaque fois cette ligne pour faire une requete depuis une fonction...

    Là, de ce que je comprend, c'est comme si il ne trouvait pas l'objet $db... mais pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    //index.php
    require("_connection.php"); 
     
    function get_informations($id_user){
        $requete = "SELECT * FROM ...."; 
        $reqCom = $db -> query($requete);
        $nbCom = $reqCom -> rowCount();
        return $nbCom;
    }
     
    $nb = get_informations('07','2016', $id_liste_service);
     
    echo "<br> NB : ".$nb ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // _connection.php
    try{
        $db = new PDO('mysql:host=localhost;dbname=-----', '----', '----');
        $db -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){ 
        //die('Erreur : '.$e->getMessage());
        echo ('La base de donnée n\'est pas disponible');
    }

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Ben ça a à voir avec la portée des variables dans une fonction... Il ne connaît pas ton $db DANS la fonction. Passe $db en paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function get_informations(PDO $db, $id_user){
        $requete = "SELECT * FROM ...."; 
        $reqCom = $db -> query($requete);
        $nbCom = $reqCom -> rowCount();
        return $nbCom;
    }
     
    $nb = get_informations($db,'07','2016', $id_liste_service);
     
    echo "<br> NB : ".$nb ;
    Par ailleurs, en dehors de ta fonction, n'oublie pas de te déconnecter avec un
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut
    Ah d'accord, c'était ' simplement ' ça. (j'avais pourtant tenté de déclarer ma variable $db en global, mais cela n'avait pas fonctionné)

    Donc cela signifie que si je créé 10 fonctions différentes avec des requêtes, il me faudra systématiquement passer en paramètre l'objet PDO $bd ?

    Quand au " unset($db) ", il est à mettre tout en bas de ma page PHP ? pas juste après l'appel à la fonction ?

    En tout cas, grand merci pour la réponse clair, rapide et efficace !

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Donc cela signifie que si je créé 10 fonctions différentes avec des requêtes, il me faudra systématiquement passer en paramètre l'objet PDO $bd ?
    Voui. C'est l'idée.
    Tu ne peux pas manipuler $toto dans une fonction si tu ne l'as pas soit créé dans cette fonction soit passé en paramètre, sinon, il ne connaît pas.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 32
    Par défaut
    Ok, je comprends.
    Merci en tout cas

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function get_informations(PDO $db, $id_user){
        $requete = "SELECT * FROM ...."; 
        $reqCom = $db -> query($requete);
        $nbCom = $reqCom -> rowCount();
        return $nbCom;
    }
    Un truc me chiffonne quand même. Ton id_user, tu le récupères comment ? Car si c'est l'utilisateur qui le saisit, tu ne dois surtout pas faire ainsi, mais passer par une requête préparée de façon à interdire toute injection SQL... Si c'est un truc généré par un auto-increment d'une table, tout va bien... tu peux faire comme ça.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/06/2011, 16h11
  2. Réponses: 2
    Dernier message: 26/02/2010, 06h34
  3. select/insert depuis une fonction PHP et SOAP
    Par roblescriso dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 06/06/2008, 11h06
  4. Appeler une fonction php dans une requete mysql
    Par yobogs dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/11/2007, 13h43
  5. Réponses: 41
    Dernier message: 27/08/2006, 15h17

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