Subversion Repositories Applications.framework

Rev

Rev 133 | Go to most recent revision | Show entire file | Regard 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 137... Line 136...
137
			$this->requete("SET names '".$this->encodage."'");
136
			$this->requete("SET names '".$this->encodage."'");
138
		}
137
		}
139
	}
138
	}
Line 140... Line 139...
140
 
139
 
141
	/**
140
	/**
142
	 * Fonction qui appelle la bonne fonction de requete suivant le type de bdd.
141
	 * Fonction qui appelle la bonne fonction pour executer une requête suivant le type de bdd.
143
	 *
142
	 *
144
	 * @param string la requete à effectuer
143
	 * @param string la requete à effectuer
145
	 * @return PDOStatement un objet contenant le résultat de la requête
144
	 * @return PDOStatement un objet contenant le résultat de la requête
146
	 */
145
	 */
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 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 306... Line 292...
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;
296
				break;
311
 
-
 
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;
300
				break;
316
 
-
 
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;
304
				break;
321
 
-
 
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;
308
				break;
326
 
-
 
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
		}
331
	}
313
	}
Line 336... Line 318...
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;
321
				$this->connexion = null;
340
			break;
322
				break;
341
 
-
 
342
			case 'mysql':
323
			case 'mysql':
343
				return mysql_close($this->connexion);
324
				return mysql_close($this->connexion);
344
			break;
325
				break;
345
 
-
 
346
			case 'mysqli':
326
			case 'mysqli':
347
				$this->connexion->close();
327
				$this->connexion->close();
348
			break;
328
				break;
349
 
-
 
350
			case 'sqlite3':
329
			case 'sqlite3':
351
				$this->connexion->close();
330
				$this->connexion->close();
352
			break;
331
				break;
353
		}
332
		}
354
	}
333
	}