Page 1 sur 1

Effectuer des requêtes à partir de classes

Posté : 18 nov. 2007, 23:53
par Kaoteknik
Bonsoir à tous,

depuis peu je me suis mis à la POO et je découvre la richesse de cette méthode de programmation. Toujours en quête d'optimisation, mais aussi, comme tout bon fainéant qui se respecte, je cherche à m'épargner de la réécriture de code. Etant donné qu'en programmation PHP il est souvent fait usage de requêtes SQL, je me suis dit qu'il pourrait être intéressant d'avoir une classe d'objet permettant de les automatiser.

Voici donc une classe que j'ai définie et parfaitement fonctionnelle :
<?php

class select_query {
	
	// On recupère le fichier contenant les informations de connexion à la base de données
	function select_database($cnx_data_file) {
		require_once ($cnx_data_file);
		$connexion = mysql_connect($dbhost, $utilisateur, $mdp) or die(mysql_error());
		mysql_select_db($nombdd, $connexion) or die(mysql_error());
	}
	
	// On effectue une requête de type SELECT à partir des informations passées en argument
	function select_table($select_param, $from_param, $where_param, $order_param, $limit_param) {
		$query = "SELECT ".$select_param." FROM ".$from_param;
		
		// On intègre les clauses optionnelles dans la requête si nécessaire
		$query .= (isset($where_param) && !empty($where_param)) ? " WHERE ".$where_param : "";
		$query .= (isset($order_param) && !empty($order_param)) ? " ORDER BY ".$order_param : "";
		$query .= (isset($limit_param) && !empty($limit_param)) ? " LIMIT ".$limit_param : "";
		
		// On execute la requête
		$exec = mysql_query($query) or die (mysql_error());
		
		// On affiche les données contenues dans la table sélectionnée
		while ($result = mysql_fetch_array($exec)) {
			echo 	$result['question'].'<br />';
		}
	}
}

?>
Puis le script appelant :
<?php

	include ("class_select_query.php");
	
	$cnx_file = "configbdd.php";
	$select = "*";
	$from = "wowfaith_questions";
	
	$exec_query = new select_query();
	$exec_query->select_database($cnx_file);
	$exec_query->select_table($select, $from, $where, $order, $limit);
	
	mysql_close();

?>
Ma question est simple : bien que ce script fonctionne très bien, a-t-on intérêt à automatiser ce genre d'opération ?

Si oui, j'écrirai d'autres classes pour effectuer les requêtes revenant le plus souvent (UPDATE, INSERT, DELETE, etc...).

Si non, pourquoi ?

Par ailleurs, si cela à un quelconque intérêt, quelles suggestions me feriez-vous pour rendre ce code plus complet ?

Voici en complément la table utilisée pour l'exemple :

Code : Tout sélectionner

CREATE TABLE `wowfaith_questions` ( `id` int(20) NOT NULL auto_increment, `question` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=126 DEFAULT CHARSET=latin1 AUTO_INCREMENT=126 ;
Merci de vos réponses ! :)

Posté : 19 nov. 2007, 00:02
par Berzemus
Je sais pas.

Les requêtes SQL peuvent être très variées (JOIN, MATCH, etc..), donc ce serait réinventer la roue.

D'un autre part, l'interface PDO permet une connexion aisée et transparente, peu importe la BD utilisée, le tout en POO.

Posté : 19 nov. 2007, 20:11
par Kaoteknik
Tu as probablement raison oui. Je me doutais qu'il devait y avoir une alternative afin éviter d'avoir à créer des classes pour effectuer des requêtes, mais sans avoir jamais entendu parler de l'interface PDO auparavant.

J'ai donc suivi le lien que tu as donné afin d'en savoir plus, et j'avoue n'y avoir pas compris grand chose. C'est encore très obscur pour moi tout ça...

Néanmoins une chose a retenu mon attention :
PDO est fournit avec PHP 5.1 et est disponible en tant qu'extension PECL pour PHP 5.0 ; PDO requiert les nouvelles fonctionnalités OO fournies par PHP 5 et donc, ne fonctionne pas avec les versions antérieures de PHP.
Malheureusement j'ai un hébergement mutualisé qui tourne avec la version 4.4.7 de PHP et je n'ai pas la possibilité de le changer, ce qui signifie par conséquent que je ne peux profiter de la PDO (si tant est que je parvienne à y comprendre quelque chose !).