|
begin process at 2008 08 20 12:26:00
Derniers logiciels
|
Trouver une ressource (Nouvelle version du moteur, plus rapide & pertinent, essayez le !)
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
CLASSE PHP4 DE CONNEXION À UN SGBD
Information sur la source
Description
Cette classe relativement simple n'est pas non plus très original étant donné qu'il en existe de nombreuses sur le sujet. Elle permet la connexion et l'exécution de requête sur n'importe quel SGBD en réécrivant la classe fille adaptée et en ajoutant une instruction à la fonction connexion(). Je n'est pour l'instant qu'écrit une sous classe pour MySQL. Elle est écris pour PHP4. Les erreurs peuvent soit être traitées avec une gestion personnalisée, soit au cas par cas. J'aimerais savoir ce que vous en pensez
Source
- <?php
- // Classe abstraite définissant une interface générique d'accès à une base de données
-
- class BASE
- {
- // propriétés protégée
- var $connexion;
- var $messExplicatif;
- var $codeErreur;
- var $messErreur;
- var $SGBD;
-
- // Constructeur de la classe
- function BASE($login, $motDePasse, $base, $serveur)
- {
- // Initialisations
- $this -> messExplicatif = "";
- $this -> codeErreur = 0;
- $this -> messErreur = "";
- $this -> sgbd = "Indefini";
-
- // Connexion au serveur par appel à une méthode privée
- if (!$this -> connexion = $this->connect($login, $motDePasse, $base, $serveur))
- {
- $this -> messExplicatif = "Erreur de connexion au SGBD " . $this->sgbd . ": <BR> " . $this->messageSGBD();
- }
- }
- // Fin du constructeur
-
-
- // Méthodes privées
- // Méthodes abstraites
- function connect($login, $motDePasse, $base, $serveur) {}
- function exe ($requete) {}
- // Méthode de mise en forme du message d'erreur du SGBD
- function messageSGBD ()
- {
- return "Libelle erreur : ".$this->messErreur."<BR />Num erreur :".$this->codeErreur;
- }
-
-
- // Méthodes publiques
- // Méthode d'exécution d'une requête
- function exeRequete ($requete)
- {
- if (!$resultat = $this -> exe ($requete))
- {
- $this -> messExplicatif = "Problème dans l'exécution de la requête : " . $requete . "<BR> " . $this->messageSGBD();
- }
- else
- {
- return $resultat;
- }
- }
- // Retour du message d'erreur
- function messageExplicatif ()
- {
- return $this->messExplicatif;
- }
-
- // Méthodes abstraites
- // Accès à la ligne suivante, sous forme d'objet
- function objetSuivant ($resultat) {}
- // Accès à la ligne suivante, sous forme de tableau associatif
- function ligneSuivante ($resultat) {}
- // Accès à la ligne suivante, sous forme de tableau indicé
- function tableauSuivant ($resultat) {}
- // Renvoie nombre de ligne de la requête
- function nbLigne($resultat){}
- // Echappement des apostrophes et autres préparations à l'insertion
- function prepareChaine($chaine) {}
-
- // Acesseur pour les propirétés propore à chaque SGBD
- // Nom du SGBD
- function getSGBD()
- {
- return $this->sgbd;
- }
- function setSGBD($sgbd)
- {
- $this->sgbd = $sgbd;
- }
- // Code erreur du SGBD
- function getCodeErreur()
- {
- return $this->codeErreur;
- }
- function setCodeErreur($codeErreur)
- {
- $this->codeErreur = $codeErreur;
- }
- // Message d'erreur du SGBD
- function getMessErreur()
- {
- return $this->messErreur;
- }
- function setMessErreur($messErreur)
- {
- $this->messErreur = $messErreur;
- }
- // Fin de la classe
- }
- ?>
-
-
- <?php
- // Sous-classe de la classe abstraite BASE, pour l'accès à MySQL
-
- require_once("base.class.php");
-
- class BASE_MYSQL extends BASE
- {
- // Pas de propriétés ou de constructeur: ils sont héritées de la classe BASE
-
-
- // Partie privée: surcharge des méthodes
- // Méthode connect: connexion à MySQL
- function connect($login, $mdp, $base, $serveur)
- {
- // Connexion au serveur MySQL
- if (!$this -> connexion = @mysql_pconnect($serveur, $login, $mdp) or !@mysql_select_db($base, $this->connexion))
- {
- $this -> sgbd = "MySQL";
- $this -> defErreur();
- return false;
- }
- else
- {
- return $this -> connexion;
- }
- }
-
- // Méthode d'exécution d'une requête.
- function exe ($requete)
- {
- if (!$resultat = @mysql_query ($requete, $this -> connexion))
- {
- $this -> defErreur();
- return false;
- }
- else
- {
- return $resultat;
- }
- }
-
- // Méthode defErreur: détermine les codes d'erreurs propres à MySQL
- function defErreur()
- {
- $this -> messErreur = mysql_error();
- $this -> codeErreur = mysql_errno();
- }
-
-
- // Partie publique: surcharge des méthodes abstraites
- // Accès à la ligne suivante, sous forme d'objet
- function objetSuivant($resultat)
- { return mysql_fetch_object($resultat); }
- // Accès à la ligne suivante, sous forme de tableau associatif
- function ligneSuivante($resultat)
- { return mysql_fetch_assoc($resultat); }
- // Accès à la ligne suivante, sous forme de tableau indicé
- function tableauSuivant($resultat)
- { return mysql_fetch_row($resultat); }
- // Renvoie nombre de ligne de la requête
- function nbLigne($resultat)
- { return mysql_num_rows($resultat); }
- // Echappement des apostrophes pour préparation à l'insertion ou à consultation
- function prepareChaine($chaine)
- { return mysql_real_escape_string($chaine); }
-
-
- // Destructeur de la classe: on se déconnecte
- function __destruct ()
- {
- if (!$this -> connexion = @mysql_close ($this->connexion))
- return false;
- }
- // Fin de la classe
- }
- ?>
-
-
- // Fonctions pour connexion à la base en fonction du SGBD
- // arguments par valeur : $login, $passe, $base, $serveur -> paramètre de connexion à la base
- // arguments par adresse : aucun
- // retourne : $bd -> objet intance de la sous-classe utilisée
- function connexion ($login, $mdp, $base, $serveur)
- {
- define ("SGBD", "MySQL"); // A definir en fonction du SGBD utilisé
-
- // Instanciation d'un objet instance de BASE.
- // Choix de la sous-classe en fonction du SGBD
- switch (SGBD)
- {
- case "PostgreSQL":
- $bd = new BASE_POSTGRESQL ($login, $mdp, $base, $serveur); // Exemple à definir
- break;
-
- case "SQLite":
- $bd = new BASE_SQLITE ($login, $mdp, $base, $serveur); // Exemple à definir
- break;
-
- default: // MySQL par défaut
- $bd = new BASE_MYSQL ($login, $mdp, $base, $serveur);
- break;
- }
- return $bd;
- }
<?php
// Classe abstraite définissant une interface générique d'accès à une base de données
class BASE
{
// propriétés protégée
var $connexion;
var $messExplicatif;
var $codeErreur;
var $messErreur;
var $SGBD;
// Constructeur de la classe
function BASE($login, $motDePasse, $base, $serveur)
{
// Initialisations
$this -> messExplicatif = "";
$this -> codeErreur = 0;
$this -> messErreur = "";
$this -> sgbd = "Indefini";
// Connexion au serveur par appel à une méthode privée
if (!$this -> connexion = $this->connect($login, $motDePasse, $base, $serveur))
{
$this -> messExplicatif = "Erreur de connexion au SGBD " . $this->sgbd . ": <BR> " . $this->messageSGBD();
}
}
// Fin du constructeur
// Méthodes privées
// Méthodes abstraites
function connect($login, $motDePasse, $base, $serveur) {}
function exe ($requete) {}
// Méthode de mise en forme du message d'erreur du SGBD
function messageSGBD ()
{
return "Libelle erreur : ".$this->messErreur."<BR />Num erreur :".$this->codeErreur;
}
// Méthodes publiques
// Méthode d'exécution d'une requête
function exeRequete ($requete)
{
if (!$resultat = $this -> exe ($requete))
{
$this -> messExplicatif = "Problème dans l'exécution de la requête : " . $requete . "<BR> " . $this->messageSGBD();
}
else
{
return $resultat;
}
}
// Retour du message d'erreur
function messageExplicatif ()
{
return $this->messExplicatif;
}
// Méthodes abstraites
// Accès à la ligne suivante, sous forme d'objet
function objetSuivant ($resultat) {}
// Accès à la ligne suivante, sous forme de tableau associatif
function ligneSuivante ($resultat) {}
// Accès à la ligne suivante, sous forme de tableau indicé
function tableauSuivant ($resultat) {}
// Renvoie nombre de ligne de la requête
function nbLigne($resultat){}
// Echappement des apostrophes et autres préparations à l'insertion
function prepareChaine($chaine) {}
// Acesseur pour les propirétés propore à chaque SGBD
// Nom du SGBD
function getSGBD()
{
return $this->sgbd;
}
function setSGBD($sgbd)
{
$this->sgbd = $sgbd;
}
// Code erreur du SGBD
function getCodeErreur()
{
return $this->codeErreur;
}
function setCodeErreur($codeErreur)
{
$this->codeErreur = $codeErreur;
}
// Message d'erreur du SGBD
function getMessErreur()
{
return $this->messErreur;
}
function setMessErreur($messErreur)
{
$this->messErreur = $messErreur;
}
// Fin de la classe
}
?>
<?php
// Sous-classe de la classe abstraite BASE, pour l'accès à MySQL
require_once("base.class.php");
class BASE_MYSQL extends BASE
{
// Pas de propriétés ou de constructeur: ils sont héritées de la classe BASE
// Partie privée: surcharge des méthodes
// Méthode connect: connexion à MySQL
function connect($login, $mdp, $base, $serveur)
{
// Connexion au serveur MySQL
if (!$this -> connexion = @mysql_pconnect($serveur, $login, $mdp) or !@mysql_select_db($base, $this->connexion))
{
$this -> sgbd = "MySQL";
$this -> defErreur();
return false;
}
else
{
return $this -> connexion;
}
}
// Méthode d'exécution d'une requête.
function exe ($requete)
{
if (!$resultat = @mysql_query ($requete, $this -> connexion))
{
$this -> defErreur();
return false;
}
else
{
return $resultat;
}
}
// Méthode defErreur: détermine les codes d'erreurs propres à MySQL
function defErreur()
{
$this -> messErreur = mysql_error();
$this -> codeErreur = mysql_errno();
}
// Partie publique: surcharge des méthodes abstraites
// Accès à la ligne suivante, sous forme d'objet
function objetSuivant($resultat)
{ return mysql_fetch_object($resultat); }
// Accès à la ligne suivante, sous forme de tableau associatif
function ligneSuivante($resultat)
{ return mysql_fetch_assoc($resultat); }
// Accès à la ligne suivante, sous forme de tableau indicé
function tableauSuivant($resultat)
{ return mysql_fetch_row($resultat); }
// Renvoie nombre de ligne de la requête
function nbLigne($resultat)
{ return mysql_num_rows($resultat); }
// Echappement des apostrophes pour préparation à l'insertion ou à consultation
function prepareChaine($chaine)
{ return mysql_real_escape_string($chaine); }
// Destructeur de la classe: on se déconnecte
function __destruct ()
{
if (!$this -> connexion = @mysql_close ($this->connexion))
return false;
}
// Fin de la classe
}
?>
// Fonctions pour connexion à la base en fonction du SGBD
// arguments par valeur : $login, $passe, $base, $serveur -> paramètre de connexion à la base
// arguments par adresse : aucun
// retourne : $bd -> objet intance de la sous-classe utilisée
function connexion ($login, $mdp, $base, $serveur)
{
define ("SGBD", "MySQL"); // A definir en fonction du SGBD utilisé
// Instanciation d'un objet instance de BASE.
// Choix de la sous-classe en fonction du SGBD
switch (SGBD)
{
case "PostgreSQL":
$bd = new BASE_POSTGRESQL ($login, $mdp, $base, $serveur); // Exemple à definir
break;
case "SQLite":
$bd = new BASE_SQLITE ($login, $mdp, $base, $serveur); // Exemple à definir
break;
default: // MySQL par défaut
$bd = new BASE_MYSQL ($login, $mdp, $base, $serveur);
break;
}
return $bd;
}
Conclusion
Voici un exemple simple d'utilisation
$base = connexion (NOM, MDP, BASE, SERVEUR); $resultat = $base -> exeRequete ("SELECT * FROM Produit");
while ($obj = $base -> objetSuivant($resultat)) echo $obj -> nomPdt."<BR />";
Sources de la même categorie
Commentaires
Discussions en rapport avec ce code source
|
Téléchargements
Logiciels à télécharger sur le même thème :
|
|