Subversion Repositories Applications.framework

Rev

Rev 93 | Rev 116 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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