Subversion Repositories Applications.framework

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 aurelien 1
<?php
2
/**
3
 * Classe modèle, donc d'accès au données, elle ne devrait pas être appelée de l'extérieur.
4
 * Elle fait office d'abstraction légère de base de données en utilisant les objects PDO natifs
5
 * de PHP
6
 * Elle est abstraite donc doit obligatoirement être étendue.
7
 */
8
abstract class Modele {
9
 
10
	/**
11
	 * registre global
12
	 */
13
	private $registre;
14
	/**
15
	 * Gestionnaire d'exceptions php
16
	 */
17
	private $gestionnaire_exception;
18
	/**
19
	 * Gestionnaire d'erreurs php
20
	 */
21
	private $gestionnaire_erreur;
22
	/**
23
	 * DSN pour accéder à la base de données
24
	 */
25
	private $dsn;
26
	/**
27
	 * Type de base de données (mysql, mysqli, etc ...)
28
	 */
29
	private $type;
30
	/**
31
	 * Hote herbergeant la base de données
32
	 */
33
	private $hote;
34
	/**
35
	 * Nom de la base de données à laquelle le modèle doit se connecter
36
	 */
37
	private $bdd_nom;
38
	/**
39
	 * Nom d'utilisateur
40
	 */
41
	private $utilisateur;
42
	/**
43
	 * Mot de passe
44
	 */
45
	private $pass;
46
	/**
47
	 * Connexion à la base de données
48
	 */
49
	private $connexion = null;
50
 
51
	/**
52
	 * Constructeur par défaut, appelé à l'initialisation
53
	 */
54
    final public function __construct() {
55
 
56
    	// les différents paramètres nécessaires sont lus à partir du registre
57
    	$this->registre = Registre::getInstance();
58
    	$this->gestionnaire_erreur = GestionnaireErreur::getInstance();
59
    	$this->type = $this->registre->get('bdd_type');
60
    	$this->hote = $this->registre->get('bdd_hote');
61
    	$this->bdd_nom = $this->registre->get('bdd_nom');
62
    	$this->utilisateur = $this->registre->get('bdd_utilisateur');
63
    	$this->pass = $this->registre->get('bdd_pass');
64
 
65
    	$this->dsn = $this->type.':dbname='.$this->bdd_nom.';host='.$this->hote;
66
    }
67
 
68
    /**
69
     * Fonction qui appelle la bonne fonction de requete suivant le type de bdd
70
     * @param string la requete à effectuer
71
     * @return PDOStatement un objet contenant le résultat de la requête
72
     */
73
    final protected function requete($requete) {
74
 
75
    	// on ne se connecte que lors du premier appel à une requete (lazy connexion)
76
    	if($this->connexion == null) {
77
    		$this->connecter();
78
    	}
79
 
80
		return $this->connexion->query($requete);
81
    }
82
 
83
    /**
84
     * Connecte à la base de données en utilisant les informations fournies par
85
     * le fichier de configuration, private et final car n'a pas vocation a être appelée
86
     * par l'utilisateur
87
     * @throws PDOException une exception dans le cas ou là connexion échoue
88
     */
89
    final private function connecter() {
90
 
91
    	// TODO: retirer le try catch et laisser le problème au gestionnaire d'exceptions
92
		try {
93
		    $this->connexion = new PDO($this->dsn,$this->utilisateur,$this->pass);
94
		} catch (PDOException $e) {
95
 
96
		}
97
    }
98
 
99
    /**
100
     * protège une chaine de caractères avant l'insertion dans la base de données
101
     */
102
    final protected function proteger($chaine) {
103
 
104
    	// on ne se connecte que lors du premier appel à une requete
105
    	if($this->connexion == null) {
106
    		$this->connecter();
107
    	}
108
 
109
    	return $this->connexion->quote($chaine);
110
    }
111
 
112
    /**
113
     * Destructeur de classe, se contente de fermer explicitement la connexion
114
     */
115
    final public function __destruct() {
116
 
117
    	if($this->connexion != null) {
118
	    	$this->connexion = null ;
119
    	}
120
    }
121
}
122
?>