Accueil > > > CLASSE PHP4 DE CONNEXION À UN SGBD
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 et avis
Discussions en rapport avec ce code source dans le forum
php 3 et php4 [ par php ]
C'est quoi la difference de php 3 et de php 4 ?
redirection [ par ouiouiteur ]
comment rediriger une page vers :-soit une page sur mon serveur chez moi, si ma connexion est active-soit vers une page sur un hebergeur gratuit pour
Connexion ki ve pas ?!? [ par FF.ST Hébergement ]
Je tente de me connecter à un serveur counter-strike ...Pas de pot, ça marche pas !Pourtant la connexion de counter strike est une cnx normale TCP sur
Comment faire ? Connexion TCP ki ve pas [ par FF.ST Hébergement ]
Je tente de me connecter à l'aide de fsockopen sur un serveur counter-strike (half life).La connexion ne marche pas :(Pk ?$cnx = fsockopen("24.120.30.
Hébergeur ASP/PHP4 [ par xav ]
J'ai trouvé un hébergeur qui fait de l'asp/php4, c'est webcentrale.com. Leurs prix sont tout à fait raisonnables et je suis vraiment très content de l
Nom de variable... [ par RockmanX ]
Voilà,j'ai un fichier que je vais appeler form.php4 qui contient 1 input : <INPUT TYPE='text' NAME='quantite".$idarticle."' VALUE='".$nbrarticle."'
Connexion à une base de données Paradox ! [ par orelien ]
Bonjour !Voilà, j'aimerai me connecter à une base de données Paradox mais je n'y arrive pas !...Quelqu'un peut il m'aider ??Merci beaucoup.Orelien.
connexion avec sql server [ par mabrouk ]
bonjour, svp je travaille sur un poste client windows2000 server dans un domaine j'ai installé easyphp(php+apache+mysql), j'ai voulu se connecter a no
Connexion telnet [ par Ark1 ]
Bijour all,J'aimerais savoir si il est possible de se connecter a un serveur telnet, si oui pourrait on me donner une pitite liste des fonction a util
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|