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] Accès d'une classe Mysql dans une autre classe


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 218
    Points : 111
    Points
    111
    Par défaut [POO] Accès d'une classe Mysql dans une autre classe
    Bonjour, je suis débutant en PHP objet et je voulais savoir comment accéder dans ma classe, à la classe d'accès à la BDD.

    exemple :

    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
    <?php class DBConnection {
    	protected $server   = "localhost";
    	protected $username = "root"; 
    	protected $password = "root";
    	protected $dbname   = "ping";
     
    	protected $connection;
     
    	function __construct() {
    		$this->connection = mysql_connect($this->server, $this->username, $this->password);
    		mysql_select_db($this->dbname,$this->connection);
    		mysql_query("SET NAMES 'utf8'", $this->connection);
    	}
     
    	function query($query) {
    		$result = mysql_query($query, $this->connection);
    		if (!$result) {
    			echo 'erreur de la requête ' . mysql_error($this->connection);
    			exit;
    		}
    		return $result;
    	}
     
    	function num_rows() {
    		return mysql_num_rows($result);
    	}
     
    	function end() {
    		mysql_close($this->connection);
    	}
    } ?>
    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
    <?php class serveurValide
        {
     
    		private $ip;
    		private $port;	
     
     
             function ping()
            {
    			$enLigne = @fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 3);
                if (!$enLigne) {
                    return 0;
    			} else {
    			fclose($enLigne);
    				return 1;
    			}
            }
     
            function reussite ($idServ, $essai, $reussite)
            {
    			$essai = ($essai + 1);
    			$reussite = ($reussite + 1);
     
    			$req = "UPDATE serveur SET essai = $essai, reussite = $reussite WHERE idServ  = $idServ ";
     
    			mysql_query($req) or die(mysql_error());  
     
            }             
     
    		function echec($idServ, $essai, $echec)
            {
    			$essai = ($essai + 1);
    			$echec = ($echec + 1);
     
    			$req = "UPDATE serveur SET essai = $essai, echec = $echec WHERE idServ  = $idServ ";
    			mysql_query($req) or die(mysql_error()); 
            }        
    		  } ?>
    J'ai dans ma classe serveurValide des requete à effectuer, mais je ne sais pas comment remplacer les mysql_query($req) or die(mysql_error()); par l'utilisation des fonctions de ma classe, puisque je me trouve déjà dans une classe.

    Merci

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    en utilisant un singleton.

    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
    <?php class DBConnection {
    	protected $server   = "localhost";
    	protected $username = "root"; 
    	protected $password = "root";
    	protected $dbname   = "ping";
     
    	protected $connection;
     
    	private static $inst;
     
    	function __construct() {
    		$this->connection = mysql_connect($this->server, $this->username, $this->password);
    		mysql_select_db($this->dbname,$this->connection);
    		mysql_query("SET NAMES 'utf8'", $this->connection);
    	}
     
    	function query($query) {
    		$result = mysql_query($query, $this->connection);
    		if (!$result) {
    			echo 'erreur de la requête ' . mysql_error($this->connection);
    			exit;
    		}
    		return $result;
    	}
     
    	function num_rows() {
    		return mysql_num_rows($result);
    	}
     
    	function end() {
    		mysql_close($this->connection);
    	}
     
            public static function inst(){
                   if(self::$inst === NULL) self::$inst = new __CLASS__;
                   return self::$inst;
            }
    } ?>
    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
    <?php class serveurValide
        {
     
    		private $ip;
    		private $port;	
     
     
             function ping()
            {
    			$enLigne = @fsockopen ('tcp://'.$ip, $port, $errno, $errstr, 3);
                if (!$enLigne) {
                    return 0;
    			} else {
    			fclose($enLigne);
    				return 1;
    			}
            }
     
            function reussite ($idServ, $essai, $reussite)
            {
    			$essai = ($essai + 1);
    			$reussite = ($reussite + 1);
     
    			$req = "UPDATE serveur SET essai = $essai, reussite = $reussite WHERE idServ  = $idServ ";
     
    			DBConnection::inst()->query($req); 
     
            }             
     
    		function echec($idServ, $essai, $echec)
            {
    			$essai = ($essai + 1);
    			$echec = ($echec + 1);
     
    			$req = "UPDATE serveur SET essai = $essai, echec = $echec WHERE idServ  = $idServ ";
    			DBConnection::inst()->query($req); 
            }        
    		  } ?>
    Aussi, je trouve que ta classe ServeurValide ne devrait posséder que des méthodes statiques.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 230
    Points
    20 230
    Par défaut
    Ou simplement en passant ton objet de bdd en paramètre à ta classe serveurValide.

    Et pour approfondire un peu la chose , un petit article sur le pattern dependency injection :
    http://www.potstuck.com/2009/01/08/p...ncy-injection/

    Edit :

    Si tu donnes une portée à tes attributs (public , protected ...) tu devrait également le faire pour tes méthodes.
    Soit tu fait du php4 : pas de portée particulière , soit du 5 auquel cas tu la défini pour chaque élément
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 218
    Points : 111
    Points
    111
    Par défaut
    "que des méthodes statiques" : quelle est la différence ?
    (merci pour l'usage des singletons)

    Ok, je vais rechercher un cours qui parle des portées afin de correctement les mettre en place.

    Merci

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par anxious Voir le message
    "que des méthodes statiques" : quelle est la différence ?
    (merci pour l'usage des singletons)
    La différence est qu'un appel statique ne nécessite pas d'instance.

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

Discussions similaires

  1. appeler une procédure stockée dans une base mysql
    Par mennou dans le forum Hibernate
    Réponses: 4
    Dernier message: 16/06/2008, 01h58
  2. Connections a une BD mysql dans une procédure stocké sql
    Par Zouko dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 13/05/2008, 15h42
  3. [POO] mysql dans les autre classes ou pas?
    Par ibasticour dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2008, 14h40
  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. Sauvegarder une instance d'une classe Java dans une BDD MySQL
    Par malag dans le forum Administration
    Réponses: 1
    Dernier message: 03/09/2006, 19h23

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