begin process at 2010 03 21 15:54:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE DE CONNEXION À UNE BASE DE DONNÉE MYSQL

CLASSE DE CONNEXION À UNE BASE DE DONNÉE MYSQL


 Information sur la source

Note :
7,25 / 10 - par 4 personnes
7,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :singleton, classe, mysql, connexion Niveau :Initié Date de création :03/05/2007 Vu :14 652

Auteur : Dansupersayan

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Voila c'est la toute premiere source que je poste, j'ai fait cette classe pour commencer la programmation objet en PHP, j'ai voulu respecter le design pattern Singleton. J'aimerais avoir le maximum d'avis sur le code ( proposez des optimisations possible, me signaler des maladroitesses de programmation) et sur la conception (respect du Singleton, utilisation de la notion d'objets).
Je penseque le code est assez documenté mais si vous avez des questions n'hesitez pas à meles posez.
Merci
Zefyre

Source

  • <?php
  • /*
  • *
  • * Auteur: Zefyre
  • *
  • * Fichier: connexion.php
  • *
  • * Date: 24 mar. 07
  • *
  • */
  • class Connexion {
  • /**
  • * *La classe Connexion permet lors d'une instanciaction de créer une connexion a une base de données, à partir d'un nom d'hote(serveur), un nom d'utilisateur et d'un mot de passe de selecionner la base d'étude et de détruire la connexion. Pour s'assurer qu'une seule connection est établie à la base on déclare le constructeur de la classe privé et l'unique facon de créer un objet et d'utiliser la seule méthose public getConnection qui verifie l'unicité de la connection ce schema s'inspire du pattern Singleton dessiné en uml:
  • */
  • /* |+++++++++++++++++++|
  • | Singleton |
  • |+++++++++++++++++++|
  • | -instance: |
  • | Connection |
  • | (static) |
  • | |
  • |+++++++++++++++++++|
  • | -Singleton() |
  • | +getInstance() |
  • | (static) |
  • |+++++++++++++++++++|
  • */
  • /**
  • * Une connection est definie par:
  • * -Un identifiant de connexion (id)
  • * -Un nom de serveur (host)
  • * -Un nom d'utilisateur (user)
  • * -Un mot de passe (pass)
  • * -Une base visée (base)
  • * -Une instance de Connexion (instance)
  • *
  • */
  • /**
  • * *L'identifiant de connexion
  • */
  • private $id;
  • /**
  • * *Le nom d'hote
  • */
  • private $host;
  • /**
  • * *Le nom d'utilisateur
  • */
  • private $user;
  • /**
  • * *Le mot de passe
  • */
  • private $pass;
  • /**
  • * *Le nom de de la base d'etude
  • */
  • private $base;
  • /**
  • * *Une instance static de Connexion
  • */
  • private static $instance;
  • /**
  • * *Constructeur de la classe Connexion
  • */
  • private function __construct($host, $user, $pass, $base)
  • {
  • $this->setHost($host); //Les differents setter
  • $this->setUser($user); //Methodes permettant l'acces en erciture des variables
  • $this->setPass($pass);
  • $this->setBase($base);
  • try {
  • $this->id = $this->connect($this->host, $this->user, $this->pass);
  • } //Tentative de connexion à la base
  • catch (Exception $e) { // Gestion de l'exception
  • header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'"); //Redirection et affichage du message, du fichier et de la ligne d'origine de l'exception
  • // DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
  • }
  • try {
  • $this->selection($base, $this->id);
  • } //Tentative de selection de la base
  • catch (Exception $e) {
  • header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'");
  • // DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
  • }
  • }
  • /**
  • * *Permet de modifier la valeur de la variable host
  • */
  • private function setHost($host)
  • {
  • if (!isset($host)) // test si lavariable est initialisé
  • header("Location:./erreur.php?erreur='serveur_vide'&code='1'"); //Si non -> redirection
  • else
  • $this->host = $host; //Si oui affectation
  • }
  • /**
  • * *Permet de modifier la valeur de la variable user
  • */
  • private function setUser($user)
  • {
  • if (!isset($user))
  • header("Location:./erreur.php?ereur='user_vide'&code='1'");
  • else
  • $this->user = $user;
  • }
  • /**
  • * *Permet de modifier la valeur de la variable pass
  • */
  • private function setPass($pass)
  • {
  • if (!isset($pass))
  • header("Location:./erreur.php?erreur='pass_vide'&code='1'");
  • else
  • $this->pass = $pass;
  • }
  • /**
  • * *Permet de modifier la valeur de la variable base
  • */
  • private function setBase($base)
  • {
  • if (!isset($base))
  • header("Location:./erreur.php?erreur='base_vide'&code='1'");
  • else
  • $this->base = $base;
  • }
  • /**
  • * *Permet de selectionner une base
  • */
  • private function selection ($base, $db)
  • {
  • $ret = mysql_select_db($base, $db); //fonction de selection PHP
  • if (isset($ret) && empty($ret)) // Test si le code de retour de la fonction est existant et vide
  • throw new Exception("selection_base_impossible"); //Gestion de l'erreur
  • return $ret;
  • }
  • /**
  • * *Permet de se connecter a la base de données MySQL
  • */
  • private function connect($host, $user, $pass)
  • {
  • $ret = mysql_connect($host, $user, $pass) or die(); //fonction de connexion a la base
  • if (isset($ret) && empty($ret))
  • throw new Exception("connexion_base_impossible");
  • return $ret;
  • }
  • /**
  • * *Permet d'obtenir une instance de Connection
  • */
  • public static function getConnexion($host, $user, $pass, $base)
  • {
  • if ((!isset($instance))) // Si aucune instance de Connexion
  • $instance = new Connexion($host, $user, $pass, $base); //Alors on en créer une
  • return $instance; //Dans tous les cas on retourne une instance (soit la nouvelle soit l'existante)
  • }
  • /**
  • * *Execute une requete SQL qui ne ne retourne aucun resultat (INSERT,UPDATE,DELETE).
  • */
  • public function execute($requete)
  • {
  • if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
  • $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
  • else {
  • if (!isset($requete) && empty($requete))
  • header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
  • else {
  • try {
  • mysql_query($requete) or die("Erreur" . mysql_error());
  • }
  • catch(Exception $e) {
  • header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
  • }
  • }
  • }
  • }
  • /**
  • * *Retourne le nombre de lignes affectées par la dernière opération SQL.
  • */
  • public function getNbLignes()
  • {
  • if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
  • $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
  • else
  • return mysql_affected_rows($this->id); //On retourne le nombre de lignes
  • }
  • /**
  • * *Retourne le resultat brut d'une selection
  • */
  • public function select($req)
  • {
  • if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
  • $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
  • else {
  • if (!isset($req) && empty($req))
  • header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
  • else {
  • try {
  • $resultat = mysql_query($req);;
  • }
  • catch(Exception $e) {
  • header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
  • }
  • return $resultat;
  • }
  • }
  • }
  • /**
  • * *Destructeur de la classe Connection
  • */
  • public function __destruct()
  • {
  • if ( !isset($this->instance) && empty($this->instance)) //On ne détruit l'instance que si elle existe
  • {
  • try
  • {
  • mysql_close($this->id);
  • }
  • catch(Exception $e)
  • {
  • header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
  • }
  • }
  • else
  • header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
  • }
  • }
  • ?>
<?php
/*
 *
 * Auteur: Zefyre
 *
 * Fichier: connexion.php
 *
 * Date: 24 mar. 07
 *
 */

class Connexion {
    /**
     * *La classe Connexion permet lors d'une instanciaction de créer une connexion a une base de données, à partir d'un nom d'hote(serveur), un nom d'utilisateur et d'un mot de passe de selecionner la base d'étude et de détruire la connexion. Pour s'assurer qu'une seule connection est établie à la base on déclare le constructeur de la classe privé et l'unique facon de créer un objet et d'utiliser la seule méthose public getConnection qui verifie l'unicité de la connection ce schema s'inspire du pattern Singleton dessiné en uml:
     */
    /*	|+++++++++++++++++++|
		|  Singleton  		|
		|+++++++++++++++++++|
		|  -instance: 		|
		|  Connection 		|
		|  (static)   	   	|
		|             	   	|
		|+++++++++++++++++++|
		| -Singleton()		|
		| +getInstance()    |
		|   (static)       	|
		|+++++++++++++++++++|

*/
    /**
     * Une connection est definie par:
     * -Un identifiant de connexion (id)
     * -Un nom de serveur (host)
     * -Un nom d'utilisateur (user)
     * -Un mot de passe (pass)
     * -Une base visée (base)
     * -Une instance de Connexion (instance)
     *
     */

    /**
     * *L'identifiant de connexion
     */
    private $id;
    /**
     * *Le nom d'hote
     */
    private $host;
    /**
     * *Le nom d'utilisateur
     */
    private $user;
    /**
     * *Le mot de passe
     */
    private $pass;
    /**
     * *Le nom de de la base d'etude
     */
    private $base;
    /**
     * *Une instance static de Connexion
     */
    private static $instance;

    /**
     * *Constructeur de la classe Connexion
     */
    private function __construct($host, $user, $pass, $base)
    {
        $this->setHost($host); //Les differents setter
        $this->setUser($user); //Methodes permettant l'acces en erciture des variables
        $this->setPass($pass);
        $this->setBase($base);

        try {
            $this->id = $this->connect($this->host, $this->user, $this->pass);
        } //Tentative de connexion à la base
        catch (Exception $e) { // Gestion de l'exception
            header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'"); //Redirection et affichage du message, du fichier et de la ligne d'origine de l'exception
            // DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
        }

        try {
            $this->selection($base, $this->id);
        } //Tentative de selection de la base
        catch (Exception $e) {
            header("Location:./erreur.php?erreur='" . $e->getMessage() . "'&code='1'");
            // DEBUGAGE echo $e->getMessage().'<br>Fichier: '.$e->getFile().'<br>Ligne: '.$e->getLine();
        }
    }

    /**
     * *Permet de modifier la valeur de la variable host
     */
    private function setHost($host)
    {
        if (!isset($host)) // test si lavariable est initialisé
            header("Location:./erreur.php?erreur='serveur_vide'&code='1'"); //Si non -> redirection
        else
            $this->host = $host; //Si oui affectation
    }

    /**
     * *Permet de modifier la valeur de la variable user
     */
    private function setUser($user)
    {
        if (!isset($user))
            header("Location:./erreur.php?ereur='user_vide'&code='1'");
        else
            $this->user = $user;
    }

    /**
     * *Permet de modifier la valeur de la variable pass
     */
    private function setPass($pass)
    {
        if (!isset($pass))
            header("Location:./erreur.php?erreur='pass_vide'&code='1'");
        else
            $this->pass = $pass;
    }

    /**
     * *Permet de modifier la valeur de la variable base
     */
    private function setBase($base)
    {
        if (!isset($base))
            header("Location:./erreur.php?erreur='base_vide'&code='1'");
        else
            $this->base = $base;
    }

    /**
     * *Permet de selectionner une base
     */
    private function selection ($base, $db)
    {
        $ret = mysql_select_db($base, $db); //fonction de selection PHP
        if (isset($ret) && empty($ret)) // Test si le code de retour de la fonction est existant et vide
            throw new Exception("selection_base_impossible"); //Gestion de l'erreur
        return $ret;
    }

    /**
     * *Permet de se connecter a la base de données MySQL
     */
    private function connect($host, $user, $pass)
    {
        $ret = mysql_connect($host, $user, $pass) or die(); //fonction de connexion a la base
        if (isset($ret) && empty($ret))
            throw new Exception("connexion_base_impossible");
        return $ret;
    }

    /**
     * *Permet d'obtenir une instance de Connection
     */
    public static function getConnexion($host, $user, $pass, $base)
    {
        if ((!isset($instance))) // Si aucune instance de Connexion
            $instance = new Connexion($host, $user, $pass, $base); //Alors on en créer une
        return $instance; //Dans tous les cas on retourne une instance (soit la nouvelle soit l'existante)
    }

    /**
     * *Execute une requete SQL qui ne ne retourne aucun resultat (INSERT,UPDATE,DELETE).
     */
    public function execute($requete)
    {
        if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
            $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
        else {
            if (!isset($requete) && empty($requete))
                header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
            else {
                try {
                    mysql_query($requete) or die("Erreur" . mysql_error());
                }
                catch(Exception $e) {
                    header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
                }
            }
        }
    }

    /**
     * *Retourne le nombre de lignes affectées par la dernière opération SQL.
     */
    public function getNbLignes()
    {
        if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
            $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
        else
            return mysql_affected_rows($this->id); //On retourne le nombre de lignes
    }

    /**
     * *Retourne le resultat brut d'une selection
     */
    public function select($req)
    {
        if (!isset($this->id) && empty($this->id)) // Test si une connexion existe si elle n'existe pas
            $this->getConnexion($host, $user, $pass, $base); //on essaye dans créer une.
        else {
            if (!isset($req) && empty($req))
                header("Location:./erreur.php?erreur='requete_invalide'&code='1'");
            else {
                try {
                    $resultat = mysql_query($req);;
                }
                catch(Exception $e) {
                    header("Location:./erreur.php?erreur='requete_impossible'&code='1'");
                }
                return $resultat;
            }
        }
    }

    /**
     * *Destructeur de la classe Connection
     */
    public function __destruct()
	{
		if ( !isset($this->instance) && empty($this->instance))	//On ne détruit l'instance que si elle existe
			{
						try
				{
				mysql_close($this->id);
				}
				catch(Exception $e)
				{
				header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
				}
			}
		else
		header("Location:./erreur.php?erreur='fermeture_impossible'&code='1'");
	}
}

?>



 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip CLASSE SQL par benjycorp
Source avec Zip Source avec une capture GÉNÉRATION DE CLASSES D'ACCÈS AUX DONNÉES À PARTIR DES TABLE... par djroulo
Source avec Zip CLASSE : GESTION D'UTILISATEURS par yoman64
CLASSE DE CONNEXION MYSQL EN PHP5 par crocxx2

Commentaires et avis

Commentaire de neigedhiver le 04/05/2007 07:10:49

Salut,

Je n'ai eu que le temps de survoler.
Je vais te faire la même remarque que celle qu'on m'a faite pour ma premièr base : c'est dommage qu'il n'y ait pas d'abstraction et que tu te cantonnes à MySQL...

Sinon, ça a l'air très propre et clair.

Je tâcherai de regarder plus en détail ce soir.

Commentaire de garfield90 le 04/05/2007 09:42:00

un peu plus d'abstraction aurait sympa.
pourquoi garde tu en mémoire name, host, user et pass.

Tu ne dois pas faire de redirection dans ta classe.

fait simplement un throw new Exception( 'message ');

et quand tu appeles ta fonction (hors classe);

try{
   $sql = Connexion::getConnexion($n,$f,$d,$s);
}catch(Exception $e){
   $e->getMessage();
}

Commentaire de exar le 04/05/2007 12:39:39

D'accord avec les deux premiers commentaires, mais c'est déjà vraiment pas mal.

Commentaire de webdeb le 04/05/2007 13:37:07

Ce n'est pas si mal. Le code est propre et soigné. Présence des attributs privés, des setters, getters et d'un singleton. Néanmoins il manque des méthodes pour récupérer les résultats sous différentes formes (array, row, assoc, object) et la gestion des erreurs devrait être plus poussée.

Malgré tout ça reste un code d'une bonne qualité. Je te mets 8/10 ;)

Je suis entrain d'écrire ma classe d'abstraction de BDD qui se base sur le principe de PDO. J'espère que je pourrais vous en faire part très prochainement ici :)

Commentaire de FhX le 06/05/2007 17:10:56

#  public static function getConnexion($host=null, $user=null, $pass=null, $base=null)
# {
# if ((!isset($instance))) // Si aucune instance de Connexion
# $instance = new Connexion($host, $user, $pass, $base); //Alors on en créer une
# return $instance; //Dans tous les cas on retourne une instance (soit la nouvelle soit l'existante)
# }

Pour t'éviter de faire à chaque fois :
maclasse::getConnexion('host', 'user', 'passwd', 'basename');
Alors qu'un simple :
maclasse::getConnexion(); peut suffir :)

Commentaire de masternico le 10/05/2007 01:58:36

J'aime bien l'idée de récuperer les erreurs. Il va faloir que j'intègre ça à mon propre source (en fait, qui n'a pas dejà fait son propre petit script de connexion mysql??? ;)
Par contre, abstraction, connais pas... ça marche en php4?

Commentaire de codefalse le 11/05/2007 10:52:45 administrateur CS

@Masternico : En php4, d'après ce que j'en ai entendu parler, tu ne peux pas vraiment faire de classes abstraites, mais tu peux tenter quelque chose qui s'y rapproche, mais ce sera quand meme plus utile et agréable a l'usage (et surtout à la maintenance) de la faire en php5.

@Zefyre : Quelque chose qui aurait été interessant (vraiment un truc tout banal :p), c'est de mettre l'url de redirection (le fichier erreur.php) dans une variable privée, comme ca on a juste a changer une valeur si la page change. Après c'est pas une grosse modification ! :)

Commentaire de aeterna le 13/01/2009 00:23:33

Bonjour et meilleurs voeux. Je mets tout doucement à la POO et j'aurai aimer savoir à quoi sert concrètement une classe de connexion. Qu'est-ce qui la diffère d'une connexion procédurale et si une âme charitable pouvait m'éclairer via un exemple d'utilisation comme par exemple l'authentification via login et mot de passe qui serait issue d'une classe utilisateur avec l'utilisation des sessions. C'est jouable ? Merci de votre aide. Cordialement, aeterna.

Commentaire de web2004 le 27/01/2009 11:17:15

c'est bien beau mais ton singleton ne fonctionne pas correctement !!! il insctancie plusieurs fois meme lorsque ton objet existe déja !!! je suppose que tu t'en es rendu compte sinon suffit de tester cette boucle pour s'en apercevoir :
$sql = Connexion::getConnexion('localhost','root','','em');
for($i=0; $i<10; $i++) {
$cnx = Connexion::getConnexion('localhost','root','','em');
echo '<pre>';
var_dump($cnx);
echo '</pre>';
}

pour plus de lisiblité ajouter un message "instance n'existait pas" et "instance existait déja" dans ta méthode getConnextion tu verras mieux.

bonne continuation

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Classe Connexion.php la plus simple possible .... [ par Tartuffe245 ] Bonjour à tous,J'ai créé une classe connexion pour mon site internet et il se trouve que j'ai une erreur qui revient souvent mais je ne sais pas comme PB de connexion à mysql depuis serveur apache sur mac [ par inaden ] Bonjour,voilà je suis sur mac os x 10.5.6. Le serveur apache fonctionne bien et j'ai, depuis peu, essayé d'installer mySQL sur la machine. Jusque là t php:aider moi(valider pseudo et mot de passe avec formulaire) [ par info3licen ] Bonjour,je travaille avec phpj'ai besoin d'aide,je n'arrive pas a trouvé la solution: j'ai fai un formulaire avec pseudo et mot de passe les utilisate Garder la connexion Mysql ouverte [ par farouk86 ] Bonjour a tous!J'ai une page login.PHP qui permet de s'authentifier et de se connecter a une base de donnée.J'ai une autre page ajouter.PHP qui permet a tous les pro du php [ par vrkill2 ] bonjour a tous qui peux mexpliqué clairement comment utiliser se code svp merci     &lt;?php // Démarage de la session PHP4// Il faut tou Connexion à mysql persitente [ par slurp ] Quelqu'un peut-il m'explique à quoi sert un connexion persistante !Merci d'avance problème concaténation [ par morpheus22170 ] Bonjour,comme le titre l'indique j'ai un problème de concaténation. Je suis sur une base de données de type "bibliothèque"Mon problème vient de l'inse Classe de gestion ftp: problème de passage de valeur? [ par spoutch ] Bonjour tout le monde ou tout du moins a ceux qui daignerons lire mon poste ^^Je travail en local sur le serveur Apache de wamp. A partir d'une source Connexion mysql [ par Leeloe6 ] Bonjour,Mon problème est que je n'arrive pas à me connecter à ma base de donnée sous linux. J'ai créé mes pages et ma bdd sous windows dans un premier projet php/mysql [ par simonano ] bonjour,je remercie bcp monsieur Bul3 d'avoir me repondre a chaque fois.enfin j'ai confiance a un endroit pour poster mon problème qui casse ma tête


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales