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 :

function test(PDO $bdd) {} [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut function test(PDO $bdd) {}
    Salutations!

    J'aimerais savoir concernant PDO qui est écrit dans ce bout de code comment on l'appelle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function test(PDO $bdd) {}
    J'essaie de trouver de l'information à ce sujet mais je n'y arrive pas par des exemples et définition dans mes recherches.

    Je sais que c'est PDO passé en paramètre mais je comprends pas le sens.

    Si quelqu'un peut me mettre sur une piste.

    Dan.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Bonjour,

    A la vue de ta fonction et de son prototype, c'est probablement la variable $bdd que tu dois envoyer en paramètre, que tu devrais logiquement avoir défini de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  3. #3
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Bonjour JujuPomme,

    Ça m'a intrigué et c'est pour ça que je fais le poste concernant la phrase en gras et soulignée.

    C'est que j'ai lu dans un forum ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    function insertBDD($table, $nomChamps, $valueChamps){  
            Global $bdd;
        $req = $bdd->prepare ('INSERT INTO '.$table.'('.$nomChamps.') VALUES(?)');
        $req->execute(array($valueChamps));
    }
    // Utilisation : insertBDD('maTable', 'pseudo', 'Natsu Nakatomi');
    ?>
    Et la réponse vu ceci:
    Je ne dis pas que c'est possible pour $bdd, je parle de l'utilisation de global.
    C'est déconseillé pour les raisons que j'ai cité. Donc aussi sûr que tu sois, il ne faut pas le faire.

    Tu passes ton objet PDO en paramètre en spécifiant d'ailleurs que ton paramètre doit être de type PDO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php function bidon(PDO $bdd, $autres, $parametres, $dont, $tu, $as, $besoin) { }
    S'il y avait une règle à quelque part qui en parle. ??
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Je vois pas ce que tu comprends pas. Tu as l'air de mélanger plusieurs choses...

    Quand tu déclares ta bdd, comme mon post plus haut, tu créer une instance de l'objet PDO.

    Donc si ton prototype de fonction est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function test(PDO $bdd) {
     
    }
    Tu as juste à l'appeller de la sorte

    Après, dans l'exemple que tu as fourni, c'est la globale qui te gène? C'est juste une déclaration "locale" pour pouvoir accéder quand même à la variable $bdd.

    Un petit lien pour plus d'info vers global (attention, global et $GLOBALS sont différents...) http://php.net/manual/fr/language.variables.scope.php
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Citation Envoyé par dancom5 Voir le message

    Et la réponse vu ceci:
    //...

    S'il y avait une règle à quelque part qui en parle. ??
    C'est un excellent conseil. Il y a deux choses à voir ici:
    - Le typage explicite dans la signature de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function test(PDO $pdo)
    C'est ce qu'on appelle un "type hint". Ça signifie que la fonction insert() exige un paramètre de type PDO, tout autre type de paramètre entraînerait une erreur fatale. On utilise cette technique parce qu'il est préférable d'avoir tout de suite une erreur fatale en cas de code incorrect, plutôt que d'accepter n'importe quel variable en paramètre au risque de créer un bug silencieux et difficile à trouver.

    - l'injection de dépendances
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function test(PDO $pdo) {
      $pdo->prepare()....
    }
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function test() {
     global $pdo;
     $pdo->prepare()
    }
    Un des principes fondamentaux de la programmation est due tout ce qui est global est mauvais (des milliers de pages ont été écrits sur ce sujet).

    Quand tu fais global $pdo dans la 2e forme de la fonction, tu fais apparaître soudainement une variable $pdo dans ta fonction. Tu n'as aucune garantie sur cette variable: tu ne sais pas de quelle type elle est, tu ne sais pas qui l'a créée, tu ne sais pas si elle est dangereuse ou pas, tu n'as aucun contrôle sur elle. Tu fermes les yeux et tu espères que ça marche, mais sans aucune certitude. C'est avec ce genre de méthode, ces "actions surnaturelles à distance", qu'on arrive à des bugs imprévisibles.

    Au contraire, dans la première forme, tu sais que $pdo est forcément de type PDO autrement ça déclenche une erreur fatale; et en plus c'est toi qui injecte $pdo dans la fonction lorsque tu l'appelles en faisant
    Tu connais donc parfaitement d'où vient $pdo, tu sais où précisément il est injecté dans le code, donc il est 100% garanti sans danger.

  6. #6
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Salutations!

    Je vais prendre un exemple concret:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function pdo_run(PDO $pdo, $query, $values = null)
    {
        //global $pdo; // it could be questioned too, but let it be someone else
        $stmt = $pdo->prepare($query);
        $stmt->execute($values);
        return $stmt;
    }
    $stmt = pdo_run('SELECT * FROM login');
    foreach ($stmt as $row) {
        echo $row['uniquekey'].'<br />';
    }
    Si j'enlève PDO $pdo et que je supprime // devant le global, ça va marcher. Mais pas comme présenté comme dans le code.
    J'avais compris que global est à éviter mais je n'arrive pas à faire fonctionner avec (PDO $pdo...)
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  7. #7
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Dans l'appel de la function, il fallait ajouter $pdo aussi.
    Bon résolu.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  8. #8
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut Voir si c'est correcte cette fonction
    Salutations!

    Voila, un peu ce que je cherchais à faire, j'ai fais ceci:

    Est-ce que la variable $user mis dans l'appel de ma fonction est correcte?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $user="pierre";
     
    function uniquekey(PDO $pdo, $query, $user){
            $query=$pdo->prepare($query);
            $query->bindValue(':user', $user, PDO::PARAM_STR);
            $query->execute();
            $result = $query->fetchAll();
            foreach($result as $r){echo $r['uniquekey'];}
    }
     
    uniquekey($pdo, "SELECT * FROM login WHERE user=:user", $user);
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Bonjour,

    Dans ton prototypage et l'appel de ta fonction, ça fonctionne.
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  10. #10
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    JujuPomme, heureux de l'apprendre.

    :-)
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  11. #11
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2015
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 644
    Points : 1 509
    Points
    1 509
    Par défaut
    Citation Envoyé par christele_r Voir le message
    Les bras m'en tombent, je regardes : CETTE DISCUSSION EST RESOLUE Alors pourtant modeste spécialiste de PDO,
    je n'ais rien compris aux interventions , toutes remplies d’erreurs de compréhension ou de syntaxe tout cela pour aboutir
    a un sujet résolu .
    Quand je retrouve cette discussion par les moteurs de recherche, je me dis que ceux qui ne nous connaissent pas garderons en mémoire "développez = "pas très PRO"
    On aide à la hauteur de nos moyens, en tentant par une explication X ou Y de novices comme moi par exemple, de comprendre et de résoudre les problèmes des uns ou des autres.

    La chose la moins pro dans cette discussion, reste votre post, et c'est bien dommage.

    Elle aurait été pro à partir du moment où au lieu de dire "erreurs de compréhensions, erreurs de syntaxe", vous expliqueriez pourquoi, comment. Dans le sens contraire, elle est en rien professionnelle.
    Un fait toujours plaisir et encourage à l'entraide. Un n'est pas à négliger, pensez aux autres !

    Que la force soit avec Developpez.net
    Je ne suis pas un crack en informatique, loin de là, mais il n'y a pas que les mécaniciens qui sachent conduire une voiture

  12. #12
    Membre actif Avatar de dancom5
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    808
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55

    Informations forums :
    Inscription : Janvier 2010
    Messages : 808
    Points : 241
    Points
    241
    Par défaut
    Citation Envoyé par christele_r Voir le message
    Les bras m'en tombent, je regardes : CETTE DISCUSSION EST RESOLUE Alors pourtant modeste spécialiste de PDO,
    je n'ais rien compris aux interventions , toutes remplies d’erreurs de compréhension ou de syntaxe tout cela pour aboutir
    a un sujet résolu .
    Quand je retrouve cette discussion par les moteurs de recherche, je me dis que ceux qui ne nous connaissent pas garderons en mémoire "développez = "pas très PRO"
    Au contraire, résolu ou pas, c'est de l'avancement quand on ose participer à des forums pour des bons motifs.
    De plus, une question n'est jamais totalement résolue dans la programmation.
    Et pour terminer, vaux mieux parfois utiliser le même sujet quand c'est le même sujet qui n'est pas nécessairement résolu ou seulement en parti.

    Ceux ou celles qui m'ont répondu jusqu'à maintenant, vous avez un PLUS et je vous considère PRO. Merci.
    On oublie souvent la simplicité ou la base dans la vie: Maslow

  13. #13
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Est-ce que la grande spécialiste de PDO, de syntaxe et de la compréhension pourrait nous expliquer, nous pauvres manants pas très professionnels, en quoi nous nous sommes fourvoyés?

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

Discussions similaires

  1. PhPUnit et les tests sur BDD en général.
    Par Nedwor dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 08/09/2015, 12h20
  2. [PDO] Problème PDO BDD
    Par InjallNanashi dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 26/10/2012, 11h39
  3. TOAD test CREATE FUNCTION
    Par magic charly dans le forum Toad
    Réponses: 6
    Dernier message: 24/01/2007, 11h59
  4. pbl installation d'une bdd test
    Par maximus10 dans le forum Oracle
    Réponses: 4
    Dernier message: 19/01/2007, 00h57
  5. [Outils] Quelle stratégie pour des tests unitaires BDD
    Par hecatonchire dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 21/04/2006, 11h20

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