Blame | Last modification | View Log | RSS feed
<?php
/**
* Classe modèle, donc d'accès au données, elle ne devrait pas être appelée de l'extérieur.
* Elle fait office d'abstraction légère de base de données en utilisant les objects PDO natifs
* de PHP
* Elle est abstraite donc doit obligatoirement être étendue.
*/
abstract class Modele {
/**
* registre global
*/
private $registre;
/**
* Gestionnaire d'exceptions php
*/
private $gestionnaire_exception;
/**
* Gestionnaire d'erreurs php
*/
private $gestionnaire_erreur;
/**
* DSN pour accéder à la base de données
*/
private $dsn;
/**
* Type de base de données (mysql, mysqli, etc ...)
*/
private $type;
/**
* Hote herbergeant la base de données
*/
private $hote;
/**
* Nom de la base de données à laquelle le modèle doit se connecter
*/
private $bdd_nom;
/**
* Nom d'utilisateur
*/
private $utilisateur;
/**
* Mot de passe
*/
private $pass;
/**
* Connexion à la base de données
*/
private $connexion = null;
/**
* Constructeur par défaut, appelé à l'initialisation
*/
final public function __construct() {
// les différents paramètres nécessaires sont lus à partir du registre
$this->registre = Registre::getInstance();
$this->gestionnaire_erreur = GestionnaireErreur::getInstance();
$this->type = $this->registre->get('bdd_type');
$this->hote = $this->registre->get('bdd_hote');
$this->bdd_nom = $this->registre->get('bdd_nom');
$this->utilisateur = $this->registre->get('bdd_utilisateur');
$this->pass = $this->registre->get('bdd_pass');
$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote;
}
/**
* Fonction qui appelle la bonne fonction de requete suivant le type de bdd
* @param string la requete à effectuer
* @return PDOStatement un objet contenant le résultat de la requête
*/
final protected function requete($requete) {
// on ne se connecte que lors du premier appel à une requete (lazy connexion)
if($this->connexion == null) {
$this->connecter();
}
return $this->connexion->query($requete);
}
/**
* Connecte à la base de données en utilisant les informations fournies par
* le fichier de configuration, private et final car n'a pas vocation a être appelée
* par l'utilisateur
* @throws PDOException une exception dans le cas ou là connexion échoue
*/
final private function connecter() {
// TODO: retirer le try catch et laisser le problème au gestionnaire d'exceptions
try {
$this->connexion = new PDO($this->dsn,$this->utilisateur,$this->pass);
} catch (PDOException $e) {
}
}
/**
* protège une chaine de caractères avant l'insertion dans la base de données
*/
final protected function proteger($chaine) {
// on ne se connecte que lors du premier appel à une requete
if($this->connexion == null) {
$this->connecter();
}
return $this->connexion->quote($chaine);
}
/**
* Destructeur de classe, se contente de fermer explicitement la connexion
*/
final public function __destruct() {
if($this->connexion != null) {
$this->connexion = null ;
}
}
}
?>