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 :

PDO Manager Mysql, retour Objet ou Array


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut PDO Manager Mysql, retour Objet ou Array
    Bonjour à tous,

    Je me pose la question suivante,

    Quelle est la manière la plus logique de procéder concernant l'usage d'une classe dédié à des actions CRUD dans une table.

    Les méthodes qui composent cette classe doivent attendre des object complets ou des tableaux ? pour la sélection de donnée doit elle renvoyer en objet créé ou un tableau ?

    Pour illuster

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
     
    public function getUtilisateurInfo($idutilisateur){
     
            $query 	= "SELECT * FROM utilisateur WHERE idutilisateur = :idutilisateur LIMIT 1";
     
            $prep	= $this->pdo->prepare($query);
            $prep->bindParam(':idutilisateur', $idutilisateur, PDO::PARAM_STR);
     
            try {
                $prep->execute();
                $data = $prep->fetch();
     
                if ($prep->rowCount() > 0) {
     
                    $utilisateur = new utilisateur();
     
                    $utilisateur->setIdutilisateur($data['idutilisateur']);
                    $utilisateur->setUtilisateurNom($data['utilisateurNom']);
                    $utilisateur->setUtilisateurPrenom($data['utilisateurPrenom']);
                    $utilisateur->setUtilisateurEmail($data['utilisateurEmail']);
                    $utilisateur->setUtilisateurMdp($data['utilisateurMdp']);
                    $utilisateur->setUtilisateurIdentifiant($data['utilisateurIdentifiant']);
                    $utilisateur->setUtilisateurType($data['utilisateurType']);
                    $utilisateur->setUtilisateurCivilite($data['utilisateurCivilite']);
                    $utilisateur->setUtilisateurActif($data['utilisateurActif']);
     
                    return $utilisateur;
     
                }
            } catch (PDOException $e) {
     
                conn::setErreur($e);
     
                return false;
            }
        }
     
    function setUtilisateurInfo(utilisateur $utilisateur){
     
            $retour = FALSE;
     
            $query ="	UPDATE utilisateur	SET
    					utilisateurCivilite		= :civilite,
    					utilisateurNom			= :nom,
    					utilisateurPrenom		= :prenom,
    					utilisateurIdentifiant	= :identifiant
     
    					WHERE idutilisateur 	= :idutilisateur LIMIT 1";
     
            $prep	= $this->pdo->prepare($query);
            $prep->bindParam(':idutilisateur', $utilisateur->getIdutilisateur(), PDO::PARAM_INT);
            $prep->bindParam(':civilite', $utilisateur->getUtilisateurCivilite(), PDO::PARAM_STR);
            $prep->bindParam(':nom', $utilisateur->getUtilisateurNom(), PDO::PARAM_STR);
            $prep->bindParam(':prenom', $utilisateur->getUtilisateurPrenom(), PDO::PARAM_STR);
            $prep->bindParam(':identifiant', $utilisateur->getUtilisateurIdentifiant(), PDO::PARAM_STR);
     
     
            try {
     
                $prep->execute();
     
                return true;
     
            } catch (PDOException $e) {
     
                conn::setErreur($e);
     
                return false;
            }
     
        }
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    public function getUtilisateurInfo($idutilisateur){
     
            $query 	= "SELECT * FROM utilisateur WHERE idutilisateur = :idutilisateur LIMIT 1";
     
            $prep	= $this->pdo->prepare($query);
            $prep->bindParam(':idutilisateur', $idutilisateur, PDO::PARAM_STR);
     
            try {
                $prep->execute();
                $data = $prep->fetch();
     
                return $data;
     
            } catch (PDOException $e) {
     
                conn::setErreur($e);
     
                return false;
            }
        }
     
    function setUtilisateurInfo($idutilisateur,$civilite,$nom,$prenom,$identifiant){
     
            $retour = FALSE;
     
            $query ="	UPDATE utilisateur	SET
    					utilisateurCivilite		= :civilite,
    					utilisateurNom			= :nom,
    					utilisateurPrenom		= :prenom,
    					utilisateurIdentifiant	= :identifiant
     
    					WHERE idutilisateur 	= :idutilisateur LIMIT 1";
     
            $prep	= $this->pdo->prepare($query);
            $prep->bindParam(':idutilisateur', $idutilisateur, PDO::PARAM_INT);
            $prep->bindParam(':civilite', $civilite, PDO::PARAM_STR);
            $prep->bindParam(':nom', $nom, PDO::PARAM_STR);
            $prep->bindParam(':prenom', $prenom, PDO::PARAM_STR);
            $prep->bindParam(':identifiant', $identifiant, PDO::PARAM_STR);
     
     
            try {
     
                $prep->execute();
     
                return true;
     
            } catch (PDOException $e) {
     
                conn::setErreur($e);
     
                return false;
            }
     
        }



    Je dois dire que j'ai commencer en envoyer et réceptionnant des objects dans mes classe CRUD, mais je commence à me poser des questions , du coup j'ai fais quelques test avec la seconde méthode et cela fonctionne sans souci. J'aimais bien dans la première l'idée de pouvoir vérifier que c'était le bon type d'objet en entrée, et le faite de pouvoir accéder au getter pour attribuer les bonnes valeurs. Par contre la seconde méthode à l'avantage de plus dissocier la partie métier de la partie BDD

    Qu'en pensez vous ?

    Merci

  2. #2
    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
    Les deux ont tous les deux des avantages. L'idéal c'est de minimiser les dépéndances les différentes parties et ainsi de gagner un max de flexibilité, mais il faut aussi faire attention à ne pas trop en faire et à perdre du temps pour atteindre une flexibilité qui ne sera jamais utilisée. Mieux vaut toujours faire un prototype parfaitement fonctionnel, et ensuite faire du refactoring à chaque itération.

    Bref, mon conseil: si tu as déjà écrit beaucoup de code, que ce code fonctionne et répond parfaitement à tes besoins, pas la peine d'en faire plus pour le moment. Le jour où tu auras besoin de modifier cette classe, créer la classe pour hydrater ton objet se fait facilement avec un bon IDE. Mais effectivement, un tableau est meilleur car:
    - PDO te donne des tableaux, donc pas d'opération supplémentaire
    - tu peux facilement transformer un tableau en json, objet, xml, html, tu peux le stocker facilement dans une base de donnée en mémoire key/value type redis, etc... ce qui te donne une plus grande flexibilité.
    - Tu peux créer des objets agrégats (combinant plusieurs tables, ou même plusieurs sources de données) plus facilement.
    - etc...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Effectivement, la majorité de mes classes sont déjà défini comme dans l'exemple numéro 1

    Disons qu'avec du recule je trouve effectivement plus logique de récupérer qu'un tableau de la classe de SQL, mais pour l'insertion je trouve assez pratique de passer un objet à la méthode de la classe SQL car lui passer toute une liste de paramètre pour chacune des propriétés que compose la classe est assez lourd :O.

    Les raisons que tu donnes semble quand même conforté l'idée que c'est une meilleurs pratique de la POO de vraiment dédier la fonction d'une classe SQL à cette seule tache. Je me dis également que si un jours un y'a l'intégration d'un framework mysql ca sera d'autant plus simple à intégrer

    Me voila rassuré que ce n'est pas non plus n'importe quoi dans mon code :O

    Dans mes classes j'ai déjà tous les Setter et Getter pour chacune des propriétés de mes objets, avec en plus les méthode pour aller chercher les données en base via une classe spécifique pour les requêtes SQL comme indiqué dans mes exemples.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/10/2008, 17h46
  2. Web service (type de retour:objet)
    Par roronnoa dans le forum Services Web
    Réponses: 5
    Dernier message: 08/09/2008, 09h33
  3. [PDO] Problème PDO ou MySQL :\
    Par WerKa dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/06/2007, 17h55
  4. [POO] Passage de valeurs d'objet à un array.
    Par Xunil dans le forum Langage
    Réponses: 5
    Dernier message: 28/12/2006, 18h06
  5. Retour de fonction array
    Par zevince dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/04/2006, 15h09

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