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 :

[POO] Mysql et POO


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 4
    Points : 3
    Points
    3
    Par défaut [POO] Mysql et POO
    Bonjour,

    Je débute dans la programmation orientée objet. J'expose d'abord un exemple et ensuite je poserai ma question

    -----------------
    J'ai une table TABLE contenant les variables NOM, PRENOM et ANNEE.
    Je souhaite récupérer ces trois valeurs via une requete sql, il me suffit de faire un SELECT NOM,PRENOM,ANNEE

    Je souhaite maintenant rendre mon code plus modulaire en utilisant les classes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class CLASSE
    { // La syntaxe n'a pas d'importance!
        GetNom();
        GetPrenom();
        GetAnnee();
    }
    Dans chacune de ces trois fonctions, je fais une requete sql séparément :
    GetNom() fera un SELECT NOM
    GetPrenom(); fera un SELECT PRENOM
    GetAnnee(); fera un SELECT ANNEE
    -----------------

    N'y a-t-il pas moyen de récupérer ces trois valeurs à l'aide d'une seule requete sql? En pratique je rencontre ce problème avec 14 variables que je souhaite récupérer en une fois, mais ça commence à faire beaucoup de requêtes.

    Merci à celui ou celle qui voudra bien m'aider ;o)
    Youn

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    salut
    tu peut faire comme ceci
    une methode pour peupler ta classe
    et un(ou des ) accesseur et un mutateur

    dans la methode populate tu fait ta requete et tu donne une valeur a tes attribut via un muttateur[/code]

  3. #3
    Invité
    Invité(e)
    Par défaut


    je pense que le plus simple et le plus adapté est l'utilisation d'un constructeur qui ferait la requete recuperant tous les champs, et qui attribuerait les données à ton objet :
    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
    class Personne
    {
      var $nom;
      var $prenom;
      var $annee;
     
      function Personne($id)
      {
        $sql = "select * from personne where id_personne = ".$id;
        $res = mysql_query($sql);
        $data = mysql_fetch_assoc($res);
        $this->nom = $data['nom_personne'];
        $this->prenom= $data['prenom_personne'];
        $this->annee= $data['annee_personne'];
      }
    }
    qu'est-ce que tu en penses ? apres tes données seraient facilement recuperables via des accesseurs, sans avoir besoin de re-balancer des requetes SQL...

  4. #4
    Candidat au Club
    Inscrit en
    Mars 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Mmh... c'est si simple... C'est exactement ce que je recherche! Un grand merci à toi

    Youn

  5. #5
    Invité
    Invité(e)
    Par défaut
    de rien , et n'oublie pas de cliquer sur [Résolu] en bas à gauche

  6. #6
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Typiquement pas d'accord.

    Comment tu fais pour instancier un objet Personne qui n'existe pas encore en base ????

    Je penche plutot pour la solution de jeff_!

    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
     
    class Personne 
    { 
    	var $nom; 
    	var $prenom; 
    	var $annee; 
     
    	function Personne( ) 
    	{ 
    		$this->nom = NULL;
    		$this->prenom = NULL;
    		$this->annnee = NULL;
    	} 
    	function Lire/* ou Populate c'est au choix*/( $id )
    	{
    		$sql = "select * from personne where id_personne = ".$id; 
    		$res = mysql_query($sql); 
    		$data = mysql_fetch_assoc($res); 
    		$this->nom = $data['nom_personne']; 
    		$this->prenom= $data['prenom_personne']; 
    		$this->annee= $data['annee_personne']; 
    	}
    }
    De plus dans la solution de torvalds si la requete plante, ton constructeur lance une exception, Warning dans ce cas précis, ce qui est anormal à mon sens.
    Personne ne s'attend à ce qu'un constructeur lance une exception.

    enfin personnellement je pousserai le vis un peu plus loin de cette manière :
    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
     
    class Personnes
    {
    	var $Items;
     
    	function Personnes()
    	{
    		$this->Reset();
    	}
     
    	function LiretoutLeMonde()
    	{
    		$this->Reset();
    		$Obj = NULL;
    		$sql = "SELECT toto, tata , titi FROM personnes";
    		$query = mysql_query($sql);
    		while($res = mysql_fetch_assoc($query) )
    		{
    			$Obj = new Personne();
    			$Obj->Construit($res);
    			$this->Items[] = $Obj;
    		}
    	}
     
    	function Reset()
    	{
    		$this->Items = array();
    	}
    }
     
    class Personne 
    { 
    	var $nom; 
    	var $prenom; 
    	var $annee; 
     
    	function Personne( ) 
    	{ 
    		$this->nom = NULL;
    		$this->prenom = NULL;
    		$this->annnee = NULL;
    	} 
     
    	function Lire/* ou Populate c'est au choix*/( $id )
    	{
    		$sql = "select toto, tata , titi from personne where id_personne = ".$id; 
    		$res = mysql_query($sql); 
    		$data = mysql_fetch_assoc($res); 
    		$this->Construit( $data );
    	}
     
    	function Construit( $TabMatiere )
    	{
    		$this->nom = $TabMatiere ['nom_personne']; 
    		$this->prenom= $TabMatiere ['prenom_personne']; 
    		$this->annee= $TabMatiere ['annee_personne']; 
    	}
    }
    Comme cela mon assignation est bien cloisonner, je ne l'écrit qu'une fois, et après la rigueur dans mes requetes SQL fera le reste.

    Enfin ce n'est que mon petit avis.

    bye

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

Discussions similaires

  1. [MySQL] Requête MySQL en POO
    Par Delvauxo dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 09/11/2011, 18h02
  2. [MySQL] POO, Mysql et Php
    Par nicolas.poulain dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/09/2008, 14h38
  3. [POO] mysql dans les autre classes ou pas?
    Par ibasticour dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2008, 15h40
  4. [POO] Débutant en POO
    Par iomega dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2006, 18h01
  5. [POO] Débutant en POO, class mysql php5
    Par ouafouaf dans le forum Langage
    Réponses: 9
    Dernier message: 06/02/2006, 10h21

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