Rev 79 | 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 = Config::get('bdd_protocole');$this->hote = Config::get('bdd_serveur');$this->bdd_nom = Config::get('bdd_nom');$this->utilisateur = Config::get('bdd_utilisateur');$this->pass = Config::get('bdd_mot_de_passe');$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote;echo $this->dsn;}/*** 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'exceptionstry {$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 requeteif($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 ;}}}?>