Voici un exemple de classe de connection dont je me sers.
La classe BD.class est une classe de connection standard, indépendante du type de base, elle catche les exceptions et sert d'interface aux classes spécialisées.
La classe BDMysql.class est une classe de connection pour mysql, elle hérite de BD.class
La classe SQLException.class traite les exceptions catchées par BD.class. Incluez-la sur un poste de développement mais rendez ses méthodes abstraites dès que vous la mettez en production (question de sécurité).
La classe Mysqli.class est une émulation de la classe mysql standard, mais surchargeant des fonctions propres à mysqli. Elle n'a d'utilité que si vous souhaitez développer pour mysqli mais que votre hébergeur actuel ne le supporte pas.
Exemple de connection
La classe BD.class est une classe de connection standard, indépendante du type de base, elle catche les exceptions et sert d'interface aux classes spécialisées.
La classe BDMysql.class est une classe de connection pour mysql, elle hérite de BD.class
La classe SQLException.class traite les exceptions catchées par BD.class. Incluez-la sur un poste de développement mais rendez ses méthodes abstraites dès que vous la mettez en production (question de sécurité).
La classe Mysqli.class est une émulation de la classe mysql standard, mais surchargeant des fonctions propres à mysqli. Elle n'a d'utilité que si vous souhaitez développer pour mysqli mais que votre hébergeur actuel ne le supporte pas.
Exemple de connection
Code PHP :
<?php
//declaration des constantes de connection
define("SERVER", "localhost");
define("USERNAME", "root");
define("PASSWORD", "XXXXX");
define("BDD", "jeu");
//insertion des classes
require_once('BDMysql.class');
//on se connecte
$bd1 = new BDMySQL(USERNAME, PASSWORD, BDD, SERVER);
//exemple de requete
$res = $bd1->execRequete("SELECT ..... ");
J'avais fait un tuto ici : http://jeuphp.forumactif.com/ftopic1808....ection.htm
Mais je le ressors suite à une demande et parce que cette classe simplifie la vie du développeur tout en accroissant les performances de l'application. Elle affiche par exemple, la requete générée lorsque celle-ci présente des erreurs (comme phpmyadmin).
Voici les scripts à recopier :
BD.class
Code PHP :
<?php
// Classe abstraite définissant une interface générique d'accès
// à une base de données. Version complète
// Exceptions SQL
require_once ("SQLException.class.php5");
abstract class BD
{
// ---- Partie privée : les propriétés
protected $sgbd, $connexion, $nom_base;
protected $code_erreur, $message_erreur;
// Constructeur de la classe
function BD ($login, $mot_de_passe, $base, $serveur)
{
// Initialisations
/*$login=USERNAME;
$mot_de_passe=PASSWORD;
$base=BDD;
$serveur=SERVER;*/
$this->nom_base = $base;
$this->code_erreur = 0;
$this->message_erreur = "";
$this->sgbd = "Inconnu?";
// Connexion au serveur par appel à une méthode privée
$this->connexion = $this->connect($login, $mot_de_passe,
$base, $serveur);
// Lancé d'exception en cas d'erreur
if ($this->connexion == 0)
throw new SQLException ("Erreur de connexion au SGBD",
$this->sgbd, $this->code_erreur);
// Fin du constructeur
}
// Méthodes privées
abstract protected function connect ($login, $mot_de_passe, $base, $serveur);
abstract protected function exec ($requete);
// Méthodes publiques
// Méthode d'exécution d'une requête
public function execRequete ($requete)
{
global $nbrequest;
$nbrequest++;
if (!$resultat = $this->exec ($requete))
throw new SQLException
("Problème dans l'exécution de la requête : $requete.<br> "
. $this->messageSGBD(), $this->sgbd, $this->code_erreur);
return $resultat;
}
// Méthodes abstraites
// Accès à la ligne suivante, sous forme d'objet
abstract public function objetSuivant ($resultat);
// Accès à la ligne suivante, sous forme de tableau associatif
abstract public function ligneSuivante ($resultat);
// Accès à la ligne suivante, sous forme de tableau indicé
abstract public function tableauSuivant ($resultat);
// Echappement des apostrophes et autres préparations à l'insertion
abstract public function prepareChaine($chaine);
// Génération d'un identifiant
abstract public function genereID($nom_sequence);
// Méthode indiquant le nombre d'attributs dans le résultat
abstract function nbAttributs ($res);
// Méthode donnant le nom d'un attribut dans un résultat
abstract function nomAttribut ($res, $position);
// Retour du message d'erreur
abstract public function messageSGBD ();
// Nom du SGBD
public function getSGBD()
{ return $this->sgbd; }
protected function setSGBD($sgbd)
{ $this->sgbd = $sgbd; }
// Fin de la classe
}
?>