Subversion Repositories Applications.framework

Rev

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

Rev 133 Rev 140
Line 12... Line 12...
12
* @package   Framework
12
* @package   Framework
13
* @author	aurelien <aurelien@tela-botanica.org>
13
* @author	aurelien <aurelien@tela-botanica.org>
14
* @copyright 2009 Tela-Botanica
14
* @copyright 2009 Tela-Botanica
15
* @license   http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
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
16
* @license   http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
17
* @version   SVN: $$Id: Modele.php 133 2009-11-30 12:44:11Z aurelien $$
17
* @version   SVN: $$Id: Modele.php 140 2010-02-22 16:23:29Z jpm $$
18
* @link	  /doc/framework/
18
* @link	  /doc/framework/
19
*
19
*
20
*/
20
*/
21
abstract class Modele {
21
abstract class Modele {
Line 95... Line 95...
95
	 * private et final car n'a pas vocation a être appelée par l'utilisateur.
95
	 * private et final car n'a pas vocation a être appelée par l'utilisateur.
96
	 *
96
	 *
97
	 * @throws Exception une exception dans le cas ou là connexion échoue
97
	 * @throws Exception une exception dans le cas ou là connexion échoue
98
	 */
98
	 */
99
	final private function connecter() {
99
	final private function connecter() {
100
 
-
 
101
		switch ($this->abstraction) {
100
		switch ($this->abstraction) {
102
			case 'pdo':
101
			case 'pdo':
103
				$this->connexion = new PDO($this->dsn, $this->utilisateur, $this->pass);
102
				$this->connexion = new PDO($this->dsn, $this->utilisateur, $this->pass);
104
			break;
103
			break;
Line 105... Line 104...
105
 
104
 
106
			case 'mysql':
105
			case 'mysql':
107
				$this->connexion = mysql_connect($this->hote,$this->utilisateur,$this->pass);
106
				$this->connexion = mysql_connect($this->hote,$this->utilisateur,$this->pass);
108
				if($this->connexion != null) {
107
				if ($this->connexion != null) {
109
					mysql_select_db($this->bdd_nom, $this->connexion);
108
					mysql_select_db($this->bdd_nom, $this->connexion);
110
				} else {
109
				} else {
111
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
110
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
112
				}
111
				}
Line 113... Line 112...
113
			break;
112
			break;
114
 
113
 
115
			case 'mysqli':
114
			case 'mysqli':
116
				$this->connexion = new mysqli($this->hote,$this->utilisateur,$this->pass, $this->bdd_nom);
115
				$this->connexion = new mysqli($this->hote,$this->utilisateur,$this->pass, $this->bdd_nom);
117
				if(!$this->connexion) {
116
				if (!$this->connexion) {
118
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
117
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
119
					return;
118
					return;
Line 120... Line 119...
120
				}
119
				}
121
			break;
120
			break;
122
 
121
 
123
			case 'sqlite3':
122
			case 'sqlite3':
124
				// cas particulier de sqllite, on considère que le nom de la base de données correspond au fichier à ouvrir
123
				// cas particulier de sqllite, on considère que le nom de la base de données correspond au fichier à ouvrir
125
				$this->connexion = new SQLite3($this->bdd_nom);
124
				$this->connexion = new SQLite3($this->bdd_nom);
126
				if(!$this->connexion) {
125
				if (!$this->connexion) {
127
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
126
					throw new Exception('Erreur de connexion à la base de données, vérifiez les paramètres du fichier de configuration');
Line 128... Line 127...
128
					return;
127
					return;
129
				}
128
				}
130
			break;
129
			break;
Line 131... Line 130...
131
 
130
 
132
			default:
131
			default:
133
				$this->connexion = null;
132
				$this->connexion = null;
134
		}
133
		}
Line 135... Line 134...
135
 
134
 
136
		if($this->encodage != null) {
135
		if ($this->encodage != null) {
137
			$this->requete("SET names '".$this->encodage."'");
136
			$this->requete("SET names '".$this->encodage."'");
138
		}
137
		}
139
	}
138
	}
140
 
139
 
141
	/**
140
	/**
Line 153... Line 152...
153
		$retour = null;
152
		$retour = null;
Line 154... Line 153...
154
 
153
 
155
		switch ($this->abstraction) {
154
		switch ($this->abstraction) {
156
			case 'pdo':
155
			case 'pdo':
157
				$retour = $this->connexion->query($requete);
156
				$retour = $this->connexion->query($requete);
158
			break;
-
 
159
 
157
				break;
160
			case 'mysql':
158
			case 'mysql':
161
				$retour = mysql_query($requete,$this->connexion);
159
				$retour = mysql_query($requete,$this->connexion);
162
			break;
-
 
163
 
160
				break;
164
			case 'mysqli':
161
			case 'mysqli':
165
				$retour = $this->connexion->query($requete);
162
				$retour = $this->connexion->query($requete);
166
			break;
-
 
167
 
163
				break;
168
			case 'sqlite3':
164
			case 'sqlite3':
169
				$retour = $this->connexion->exec($requete);
165
				$retour = $this->connexion->exec($requete);
170
			break;
166
				break;
Line 171... Line 167...
171
		}
167
		}
172
 
168
 
Line 173... Line 169...
173
		return $retour;
169
		return $retour;
174
	}
-
 
175
 
170
	}
176
	final protected function requeteUn($requete,$mode = 'ASSOC') {
171
 
177
 
172
	final protected function requeteUn($requete,$mode = 'ASSOC') {
178
		// on ne se connecte que lors du premier appel à une requete (lazy connexion)
173
		// Connection seulement lors du premier appel à une requete (lazy connexion)
Line 179... Line 174...
179
		if ($this->connexion == null) {
174
		if ($this->connexion == null) {
180
			$this->connecter();
-
 
181
		}
175
			$this->connecter();
182
 
176
		}
183
		$retour = null;
177
 
184
 
178
		$retour = null;
185
		switch ($this->abstraction) {
179
		switch ($this->abstraction) {
186
			case 'pdo':
-
 
187
				$res_req = $this->connexion->query($requete);
180
			case 'pdo':
188
				$retour =$res_req->fetch($this->$mode);
181
				$res_req = $this->connexion->query($requete);
189
			break;
182
				$retour =$res_req->fetch($this->$mode);
190
 
183
				break;
191
			case 'mysql':
184
			case 'mysql':
192
				$res = mysql_query($requete,$this->connexion);
-
 
193
				$fonction_fetch = $this->$mode;
185
				$res = mysql_query($requete,$this->connexion);
194
				$retour = $fonction_fetch($res);
186
				$fonction_fetch = $this->$mode;
195
			break;
187
				$retour = $fonction_fetch($res);
196
 
188
				break;
197
			case 'mysqli':
189
			case 'mysqli':
198
				$res = $this->connexion->query($requete);
-
 
199
				$fonction_fetch = $this->$mode;
190
				$res = $this->connexion->query($requete);
200
				$retour = $res->$fonction_fetch();
191
				$fonction_fetch = $this->$mode;
201
			break;
192
				$retour = $res->$fonction_fetch();
202
 
193
				break;
Line 203... Line 194...
203
			case 'sqlite3':
194
			case 'sqlite3':
204
				$retour = $this->connexion->querySingle($requete);
195
				$retour = $this->connexion->querySingle($requete);
Line 205... Line 196...
205
			break;
196
				break;
206
		}
-
 
207
 
197
		}
208
		return $retour;
198
 
209
	}
199
		return $retour;
210
 
200
	}
Line 211... Line 201...
211
 
201
 
Line 212... Line 202...
212
	final protected function requeteTous($requete,$mode = 'ASSOC') {
202
 
213
 
203
	final protected function requeteTous($requete,$mode = 'ASSOC') {
214
		// on ne se connecte que lors du premier appel à une requete (lazy connexion)
204
		// Connexion seulement lors du premier appel à une requete (lazy connexion)
-
 
205
		if ($this->connexion == null) {
215
		if ($this->connexion == null) {
206
			$this->connecter();
-
 
207
		}
-
 
208
 
-
 
209
		$retour = null;
216
			$this->connecter();
210
 
217
		}
-
 
218
 
211
		switch ($this->abstraction) {
219
		$retour = null;
212
			case 'pdo':
220
 
213
				$res_req = $this->connexion->query($requete);
221
		switch ($this->abstraction) {
214
				if ($res_req !== false) {
222
			case 'pdo':
215
					$retour = $res_req->fetchAll($this->$mode);
223
				$res_req = $this->connexion->query($requete);
216
				} else {
224
				$retour =$res_req->fetchAll($this->$mode);
217
					$retour = false;
225
			break;
-
 
226
 
218
				}
227
			case 'mysql':
219
				break;
228
				$res = mysql_query($requete,$this->connexion);
220
			case 'mysql':
229
				$fonction_fetch = $this->$mode;
221
				$res = mysql_query($requete, $this->connexion);
230
				while($ligne = $fonction_fetch($res)) {
222
				$fonction_fetch = $this->$mode;
231
					$retour[] = $ligne;
223
				while ($ligne = $fonction_fetch($res)) {
232
				}
224
					$retour[] = $ligne;
233
			break;
-
 
234
 
225
				}
235
			case 'mysqli':
226
				break;
236
				$res = $this->connexion->query($requete);
227
			case 'mysqli':
237
				$function_fetch = $this->$mode;
228
				$res = $this->connexion->query($requete);
238
				while($ligne = $res->$function_fetch()) {
229
				$function_fetch = $this->$mode;
239
					$retour[] = $ligne;
-
 
240
				}
230
				while ($ligne = $res->$function_fetch()) {
241
			break;
231
					$retour[] = $ligne;
242
 
232
				}
243
			case 'sqlite3':
233
				break;
244
				$res = $this->connexion->query($requete);
234
			case 'sqlite3':
245
				while($ligne = $res->fetch_array($this->ASSOC)) {
235
				$res = $this->connexion->query($requete);
246
					if($mode == $this->ASSOC) {
236
				while ($ligne = $res->fetch_array($this->ASSOC)) {
247
						$retour[] = $ligne;
237
					if ($mode == $this->ASSOC) {
248
					}
238
						$retour[] = $ligne;
249
					elseif($mode == $this->OBJECT){
239
					} elseif ($mode == $this->OBJECT) {
250
						// cas particulier de sqllite
240
						// cas particulier de sqllite
251
						// qui n'a pas de fonction fetch_object
-
 
252
						$ligneObjet = new stdClass();
241
						// qui n'a pas de fonction fetch_object
Line 253... Line 242...
253
						foreach($ligne as $colonne => $valeur) {
242
						$ligneObjet = new stdClass();
254
							$ligneObjet->$colonne = $valeur;
243
						foreach ($ligne as $colonne => $valeur) {
Line 276... Line 265...
276
		$retour = $chaine;
265
		$retour = $chaine;
Line 277... Line 266...
277
 
266
 
278
		switch ($this->abstraction) {
267
		switch ($this->abstraction) {
279
			case 'pdo':
268
			case 'pdo':
280
				$retour = $this->connexion->quote($chaine);
269
				$retour = $this->connexion->quote($chaine);
281
			break;
-
 
282
 
270
				break;
283
			case 'mysql':
271
			case 'mysql':
284
				$retour = '"'.mysql_real_escape_string($chaine, $this->connexion).'"';
272
				$retour = '"'.mysql_real_escape_string($chaine, $this->connexion).'"';
285
			break;
-
 
286
 
273
				break;
287
			case 'mysqli':
274
			case 'mysqli':
288
				$retour = '"'.$this->connexion->real_escape_string($chaine).'"';
275
				$retour = '"'.$this->connexion->real_escape_string($chaine).'"';
289
			break;
-
 
290
 
276
				break;
291
			case 'sqlite3':
277
			case 'sqlite3':
292
				$retour = $this->connexion->escapeString($chaine);
278
				$retour = $this->connexion->escapeString($chaine);
293
			break;
279
				break;
Line 294... Line 280...
294
		}
280
		}
295
 
281
 
Line 305... Line 291...
305
 
291
 
306
		switch ($this->abstraction) {
292
		switch ($this->abstraction) {
307
			case 'pdo':
293
			case 'pdo':
308
				$this->ASSOC = PDO::FETCH_ASSOC;
294
				$this->ASSOC = PDO::FETCH_ASSOC;
309
				$this->OBJECT = PDO::FETCH_CLASS;
295
				$this->OBJECT = PDO::FETCH_CLASS;
310
			break;
-
 
311
 
296
				break;
312
			case 'mysql':
297
			case 'mysql':
313
				$this->ASSOC = 'mysql_fetch_assoc';
298
				$this->ASSOC = 'mysql_fetch_assoc';
314
				$this->OBJECT = 'mysql_fetch_object';
299
				$this->OBJECT = 'mysql_fetch_object';
315
			break;
-
 
316
 
300
				break;
317
			case 'mysqli':
301
			case 'mysqli':
318
				$this->ASSOC = 'fetch_assoc';
302
				$this->ASSOC = 'fetch_assoc';
319
				$this->OBJECT = 'fetch_object';
303
				$this->OBJECT = 'fetch_object';
320
			break;
-
 
321
 
304
				break;
322
			case 'sqlite3':
305
			case 'sqlite3':
323
				$this->ASSOC = 'SQLITE3_ASSOC';
306
				$this->ASSOC = 'SQLITE3_ASSOC';
324
				$this->OBJECT = 'SQLITE3_OBJECT';
307
				$this->OBJECT = 'SQLITE3_OBJECT';
325
			break;
-
 
326
 
308
				break;
327
			default:
309
			default:
328
				throw new Exception('Erreur : l\'abstraction '.$this->abstraction.' n\'est pas prise en charge');
310
				throw new Exception('Erreur : l\'abstraction '.$this->abstraction.' n\'est pas prise en charge');
329
			break;
311
				break;
330
		}
312
		}
Line 331... Line 313...
331
	}
313
	}
332
 
314
 
333
	/**
315
	/**
334
	 * Destructeur de classe, se contente de fermer explicitement la connexion
316
	 * Destructeur de classe, se contente de fermer explicitement la connexion
335
	 */
317
	 */
336
	final public function __destruct() {
318
	final public function __destruct() {
337
		switch ($this->abstraction) {
319
		switch ($this->abstraction) {
338
			case 'pdo':
320
			case 'pdo':
339
				$this->connexion = null;
-
 
340
			break;
321
				$this->connexion = null;
341
 
322
				break;
342
			case 'mysql':
323
			case 'mysql':
343
				return mysql_close($this->connexion);
-
 
344
			break;
324
				return mysql_close($this->connexion);
345
 
325
				break;
346
			case 'mysqli':
326
			case 'mysqli':
347
				$this->connexion->close();
-
 
348
			break;
327
				$this->connexion->close();
349
 
328
				break;
350
			case 'sqlite3':
329
			case 'sqlite3':
351
				$this->connexion->close();
330
				$this->connexion->close();
352
			break;
331
				break;
353
		}
332
		}
354
	}
333
	}
355
}
334
}