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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
| <?php
// Inclusion de la bibliothèque ADOdb
//include dirname(__FILE__).'/util.inc.php';
// Variable de gestion des langues pour les erreurs ADOdb
$ADODB_LANG = fr;
// Classe de gestion de la base de données
class BD{
// Attributs de la classe BD
private $connexion; // Variable qui contient l'objet de connexion
private $message_erreur; // Variable contenant les messages d'erreurs
private $nb_erreurs; // Variable pour compter le nombre d'erreurs
private $debug = false; // Variable qui permet d'enclencher le mode debug
// Laisser la valeur true à la variable $debug pour effectuer des tests
//Constructeur
function __construct($bdtype, $login, $passe, $base, $serveur){
$this->nb_erreurs = 0; // Initialisation du nombre d'erreurs à 0
$this->connexion = ADONewConnection($bdtype); // Création de l'objet de connexion
$this->connexion -> debug = $this->debug; // Permet d'activer le mode debug
@$this->connexion -> Connect($serveur, $login, $passe, $base); // Connexion à la base de données
if (!$this->connexion -> IsConnected()){ // Gestion des erreurs de connexion
// Introduit le type d'erreur dans le message d'erreur de la classe
$this->message("<b>[BD.class.BD ( ".$login.", ".$base.", ".$serveur." )]</b> Accès à la bd $base impossible\n");
// Introduit le message d'erreur du SGBD dans le message d'erreur de la classe
$this->message("<B>Le SGBD proteste : </B>" .$this->connexion->ErrorMsg());
}
}
// METHODES ET FONCTIONS
// Génération des messages d'erreurs
private function message($message){
// Ajoute le message en paramètre à celui existant
$this->message_erreur.= $message."<BR/>";
// Incrément le nombre d'erreur de 1
$this->nb_erreurs = $this->nb_erreurs + 1;
}
// Retourne le message d'erreur
public function getMsgErr(){
return $this->message_erreur;
}
public function getMsgErrADOdb($no){
return $this->connexion->MetaErrorMsg($no)."<br>";
}
// Retourne le nombre d'erreurs
public function getNbreErreur(){
return $this->nb_erreurs;
}
// Retourne le numéro d'erreur
public function getNumErrSGBD(){
// ErrorNo donne le numéro d'erreur du SGBD
return $this->connexion -> ErrorNo();
}
// Retourne le numéro d'erreur ADObd
public function getNumErrADOdb(){
// MetaError donne le numéro d'erreur de ADOdb
return $this->connexion -> MetaError();
}
// Méthode indiquant si une erreur a été rencontrée
public function verifErreur(){
if($this->nb_erreurs > 0) // Retourne la valeur true si il y a des erreurs
$reponse = true;
if($this->nb_erreurs < 1) // Retourne la valeur false si il n'y a pas d'erreur
$reponse = false;
return $reponse;
}
// Fonction qui permet d'executer une requête
public function requete($requete){
$resultat = $this->connexion -> Execute($requete);
// Test si il y a une erreur
if (!$resultat)
{
// Identification de l'erreur
// Introduit le type d'erreur dans le message d'erreur de la classe
$this->message ("<B>[BD.class.requete] : </B> Problème dans l'exécution de la requête : $requete ");
// Introduit le message d'erreur du SGBD dans le message d'erreur de la classe
$this->message ("<B>Le SGBD proteste : </B>" .$this->connexion->ErrorMsg());
}
return $resultat;
}
// Fonction qui permet de faire un select avec un limite de résultats
public function select($requete, $limite, $aPartirDe=""){
if(!$aPartirDe)
$aPartirDe = -1;
$resultat = $this->connexion -> SelectLimit($requete, $limite, $aPartirDe);
// Test si il y a une erreur
if (!$resultat)
{
// Identification de l'erreur
// Introduit le type d'erreur dans le message d'erreur de la classe
$this->message ("<B>[BD.class.select] : </B> Problème dans l'exécution de la sélection : $requete; limite : $limite");
// Introduit le message d'erreur du SGBD dans le message d'erreur de la classe
$this->message ("<B>Le SGBD proteste : </B>" .$this->connexion->ErrorMsg());
}
return $resultat;
}
// Fonction qui retourne le nombre de résultats(nombre de lignes)
public function nbreResultat($res){
// RecordCount retourne le nombre de lignes du résultat d'un requête
return @$res->RecordCount();
}
// Méthode indiquant le nombre d'attributs dans le résultat
public function nbreAttributs($res){
if($this->verifErreur() == false)
return $res->FieldCount();
else return null;
}
// Méthode donnant les propriétés d'un attribut : nom, type et longeur max
public function proprAttribut($res, $position){
// Test sur la position
if ($position < 0 or $position >= $this->nbreAttributs($res)){
$this->message ("<b>[BD.class.proprAttribut(".$res.")]</b> Pas d'attribut en position $position");
return null;
}
else return $res->FetchField($position);
}
// Méthode donnant le nom d'un attribut
public function nomAttribut($res, $position){
// Test sur la position
if ($position < 0 or $position >= $this->nbreAttributs($res)){
$this->message ("<b>[BD.class.nomAttribut(".$res.")]</b> Pas d'attribut en position $position");
return null;
}
else return $res->FetchField($position)->name;
}
// Méthode donnant le type d'un attribut
public function typeAttribut($res, $position){
// Test sur la position
if ($position < 0 or $position >= $this->nbreAttributs($res)){
$this->message ("<b>[BD.class.typeAttribut(".$res.")]</b> Pas d'attribut en position $position");
return null;
}
else return $res->FetchField($position)->type;
}
// Méthode donnant la longueur maximum d'un attribut
public function longMaxAttribut($res, $position){
// Test sur la position
if ($position < 0 or $position >= $this->nbreAttributs($res)){
$this->message ("<b>[BD.class.longMaxAttribut(".$res.")]</b> Pas d'attribut en position $position");
return null;
}
else return $res->FetchField($position)->max_length;
}
// Accès à la ligne suivante, sous forme d'objet
public function objetSuivant($res){
return $res->FetchNextObj();
}
// Accès à la ligne suivante, sous forme de tableau associatif
public function ligneSuivante ($res){
return $res->FetchRow();
}
// Accès à la ligne suivante, sous forme de tableau indicé
function tableauSuivant ($res){
$ligne = $this->ligneSuivante($res);
$tableau = array();
for($i=0; $i<$this->nbreAttributs($res); $i++){
$tableau[$i]=$ligne[$this->nomAttribut($res, $i)];
}
return $tableau;
}
// Affiche le contenu du résultat
public function affiche_resultat($res_req){
// Tableau dans lequel s'affichera le contenu du résultat
echo"<table border=1 collspace=3>";
// Entete du tableau --> nom des collonnes du résultat
echo"<tr>";
echo"<tr>";
for($i=0; $i<$this->nbreAttributs($res_req); $i++){
echo "<th>".$this->nomAttribut($res_req,$i)."</th>";
}
echo"<tr>";
// Déplacement sur les lignes du résultat
for($i=0; $i<$this->nbreResultat($res_req); $i++)
{
$line = $this->tableauSuivant($res_req);
echo"<tr>";
// Déplacement sur les colonnes du résultat
foreach ($line as $colonne)
echo "<td>".$colonne."</td>";
echo "</tr>";
} // Fin parcours des lignes
echo"</table>";
}
// Méthode donnant l'id de la dernière ligne insérée
public function idDerniereLigne()
{
return $this->connexion->Insert_ID();
}
// Destructeur premet de déconnecter la base de donnée en détruisant l'objet
function __destruct(){
$this->connexion -> Close(); // Fermeture de la connexion en cours
}
}// Fin de la classe BD
?> |
Partager