Rev 120 | Blame | Last modification | View Log | RSS feed
<?php// declare(encoding='UTF-8');/*** 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.** PHP Version 5** @category Class* @package Framework* @author aurelien <aurelien@tela-botanica.org>* @copyright 2009 Tela-Botanica* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL* @version SVN: $$Id: Modele.php 122 2009-09-01 15:00:35Z aurelien $$* @link /doc/framework/**/abstract class Modele {/*** registre global*/private $registre;/*** 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;/*** Encodage de la base de données*/private $encodage = null;/*** 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->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->encodage = Config::get('bdd_encodage');$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);}/*** Connection à 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() {trigger_error('oh oh oh o une erreur ',E_USER_WARNING);$this->connexion = new PDO($this->dsn, $this->utilisateur, $this->pass);if($this->encodage != null) {$this->requete("SET names '".$this->encodage."'");}}/*** 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 ;}}}?>