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 : Connexion BDD [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut POO : Connexion BDD
    Bonjour tout le monde,
    Alors je tourne et tourne et tourne le problème je ne trouve pas de solution qui répondrait éventuellement a mon problème que ce soit sur le forum ou sur Google est ce mes yeux qui me joue des tours je ne sais pas mais je fatigue !
    J'essaie de trouver des exemples de codes qui permettrait de ce connecter a la base de donnée sans requête rien juste se connecter a la BDD en POO ..
    J'avais fais quelque chose mais c'était nullissime du coup j'essaie de recommencer j'en suis la :
    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
    <?php
     
    class connexionBDD {
     
      protected $bdd ;
     
      public function __construct () 
      {
    	try
    	{
    		$this->$bdd = new PDO('mysql:host=localhost;dbname=lcesa', 'root', 'lcesa');
    	}
     
    	catch (Exception $e)
    	{
           die('Erreur : ' . $e->getMessage());
    	}
      }
     
      function connexion () 
      {
     
      }
     
      function deconnexion () 
      {
     
        odbc_close();
     
      }   
     
    }
    ?>
    Si quelqu'un pourrait me donné un lien ou quelque chose pour me pister honnêtement je suis preneuse !
    Merci a tous bonne fin de journée les loulous !

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Points : 242
    Points
    242
    Par défaut
    Salut,

    Tu te connecte deja a la bdd via ton constructeur

    sinon un souci avec $this->$bdd, corriges ça avec $this->bdd

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 381
    Points : 10 410
    Points
    10 410
    Par défaut
    Eventuellement tu peux utiliser une méthode statique pour ta connexion, ainsi elle ne sera instanciée qu'une seule fois.

    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
    class C_PDO 
    {	
    	private static $connexion;
     
    	private function __construct() 
    	{
    		try
    		{
                            //fichier qui contient les variables de connexion ($hostname,$database,$username,$password)
    			require_once('Connections/connect_bdd.php');
     
    			// mode d'erreurs
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
     
    			// Indispensable pour ne pas avoir execute qui formate en string avec un tableau en paramètre  (ce qui est incompatible avec la clause limit)
    			$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
     
                            // Si on veux définir le mode de récupération des données par défaut (ici le mode objet)
    			$pdo_options[PDO::ATTR_DEFAULT_FETCH_MODE] = PDO::FETCH_OBJ;
     
    			//charset reconnu dans la connexion à partir de php 5.3.6 auquel cas on peut supprimer l'option MYSQL_ATTR_INIT_COMMAND ci-dessous
    			//$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
     
    			self::$connection  = new PDO('mysql:host='.$hostname.';dbname='.$database.';charset=utf8', $username, $password, $pdo_options);	
    		}
    		catch (PDOException $e)
    		{
    			// message en production
    			//die('Serveur de base de données en dérangement, veuillez réessayer ultérieurement.');
     
    			// message complet en développement
    			echo $e->getMessage();
    		}
    	}
     
    	public static function getC() 
    	{
    		if(self::$connection == NULL) {new self();}
    		return self::$connection;
    	}	 
    }
    Ensuite depuis n'importe où dans ton code il te suffira de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connect = C_PDO::getC();
    pour initialiser la connexion ou pour la récupérer si elle a déjà été créée.

    Après certains préfèrent éviter ce type de pratique pour réduire la dépendance entre les classes car cela revient à utiliser une variable globale (améliorée). Mais à ce détail près qui est rarement gênant (sinon pour des pb philosophiques) c'est vraiment très pratique. Ou sinon tu peux passer la connexion en paramètre à une fonction.

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Salut tout le monde !
    Merci de vos réponses qui m'ont été très utiles et qui m'ont permise de comprendre beaucoup de choses

  5. #5
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    J'ai un autre problème auquel je ne trouve pas de réponses ,
    J'ai un message d'erreur pour chaque variable utilisé qui dit qu'elles ne sont pas déclaré alors qu'elles le sont dans ma classe voici le code :

    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 connexionBDD {
     
    	protected $PARAM_hote='localhost'; // le chemin vers le serveur
    	//protected $PARAM_port='3306';
    	protected $PARAM_nom_bd='lcesa'; // le nom de votre base de données
    	protected $PARAM_utilisateur='root'; // nom d'utilisateur pour se connecter
    	protected $PARAM_mot_passe='lcesa'; // mot de passe de l'utilisateur pour se connecter
     
      public function __construct () 
      {
    	try
    	{
            $connexion = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
    	}	
     
    	catch(Exception $e)
    	{
            echo 'Une erreur est survenue !';
            die();
    	}
      }
     
      function deconnexion () 
      {
        odbc_close(); 
      }   
     
    }
    ?>

  6. #6
    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 : 39
    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 222
    Points
    20 222
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $connexion = new PDO('mysql:host='.$this->PARAM_hote.';dbname='.$this->PARAM_nom_bd, $this->PARAM_utilisateur, $this->PARAM_mot_passe);
    Au passage l'utilisation des majuscule est généralement réservé aux contantes.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 429
    Points : 135
    Points
    135
    Par défaut
    Bonjour grunk
    Merci de ta réponse rapide et pertinente j'ai rectifié ce problème de majuscule =) Merci beaucoup .

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 381
    Points : 10 410
    Points
    10 410
    Par défaut
    Bonjour,

    Quand je disais "...après certains préfèrent éviter ce type de pratique pour réduire la dépendance entre les classes...", je ne parlais pas de la classe en elle-même, je parlais uniquement de la façon de l'utiliser :
    - Appeler la connexion depuis n'importe où dans les classes en ayant besoin.
    ou
    - Passer la connexion comme argument aux classes en ayant besoin.

    Utilises cette deuxième solution si tu veux respecter à la lettre l'esprit pdo (indépendance des classes). Cela dit c'est surtout intéressant pour les grosses équipes de développement qui veulent pouvoir puiser dans des librairies de classes qui n'ont pas forcément toutes les mêmes conventions de nommage (ex: nom de la fonction de connexion).
    Par contre pour les plus petites équipes qui peuvent assurer une convention de nommage constante ou a fortiori pour les développement en solo, le fait d'avoir à éviter de passer la connexion comme argument dans chaque classe offre un confort/rapidité de développement appréciable.

    J'ai précisé ces points parce que tu devrais y réfléchir à deux fois avant d'utiliser une classe de connexion "standard" telle que celle écrite dans ton dernier code :
    Avec le mode de développement actuel qui consiste à faire de nombreux includes de classes dont certaines auront besoin d'utiliser la bdd, tu risques fort d'instancier la connexion plusieurs fois successivement, ce qui est déconseillé. Et pour résoudre cet épineux problème, le pire en termes de performances serait de fermer la connexion à la lin de chaque classe pour la ré ouvrir ensuite.
    C'est pour cette raison que la méthode statique que je t'ai montrée est très, très souvent employée : on peut l'appeler autant de fois que l'on veut mais la connexion ne sera instanciée qu'une seule fois, ce qui résout nos problèmes d'organisation/performances
    Ensuite libre à toi de l'utiliser de la manière que tu veux...

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

Discussions similaires

  1. [POO] POO > classe + connexion BDD
    Par onet dans le forum Langage
    Réponses: 11
    Dernier message: 20/11/2008, 12h00
  2. Connexion BDD oracle TNS protocol adapter error
    Par cedrickb dans le forum Access
    Réponses: 3
    Dernier message: 30/12/2004, 13h02
  3. [tomcat][jsp] Comment gerez vous vos connexions bdd?
    Par olive.m dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 21/06/2004, 17h35
  4. pb de connexion bdd
    Par picoti2 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/03/2004, 18h53
  5. [BCB6] DBGrid et mode de connexion BDD... demain
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/01/2004, 13h56

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