Constucteur de requete SQL en php

Fermé
liliputien2002 Messages postés 46 Date d'inscription jeudi 2 octobre 2003 Statut Membre Dernière intervention 1 avril 2004 - 1 avril 2004 à 14:57
cobax Messages postés 33 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 12 juin 2008 - 19 mai 2008 à 23:30
Bonjour

Pour ceux qui en ont marre de taper a la mimine les requete sql simple (Select, Insert, Update, Delete)(monotable), voila un objet php qui pourra (je l'espère) faire plaisir à certain.

tout d'abord le code de l'objet :

class Table {
	var $From;
	var $Table = array();
	var $StrucTable = array();

	// constructeur
	function Table($NomTable, $NomBase) {
		$this->From = $NomTable;
		mysql_connect("localhost", "mdslroot", "access_");
		mysql_select_db($NomBase);
		$resultat=mysql_query("SELECT * FROM ".$NomTable);
		$nbr_champ = mysql_num_fields($resultat);
		$contenuChamp=mysql_fetch_row($resultat);

		for ($i=0;$i<$nbr_champ;$i++) {
			$this->StrucTable[$i] = mysql_field_name($resultat, $i);
		}

		mysql_close();

		foreach($this->StrucTable as $k => $v) {
			$this->Table[$v][0] = $v;
			$this->Table[$v]["S"] = "Not";
			$this->Table[$v]["V"] = "Not";
		}


	}

	// métode de construction de requete select
	function Select($WhereClause, $OrderClause, $GroupClause) {
		$SelectClause = "";

		foreach($this->StrucTable as $k => $v) {
			if ($this->Table[$v]["S"] == "1") {
				$SelectClause .= $this->Table[$v][0] . ", ";
			}
		}

		$SelectClause = substr($SelectClause, 0, strlen($SelectClause)-2);

		$Rq="SELECT " . $SelectClause . " FROM " . $this->From;
		if ($WhereClause<>"") {
			$Rq .= " WHERE " . $WhereClause;
		}

		if ($OrderClause<>"") {
			$Rq .= " ORDER BY " . $OrderClause;
		}

		if ($GroupClause<>"") {
			$Rq .= " GROUP BY " . $GroupClause;
		}
		$this->RAZ();
		return $Rq;
	} // fin de la méthode lire_patient

	// méthode de contruction de requete Update
	function Update($WhereClause) {
		$UpdateClause = "";

		foreach($this->StrucTable as $k => $v) {
			if ($this->Table[$v]["S"] == "1") {
				$UpdateClause .= "`" . $this->Table[$v][0] . "`='" . $this->Table[$v]["V"] . "', ";
			}
		}

		$UpdateClause = substr($UpdateClause, 0, strlen($UpdateClause)-2);

		$Rq="UPDATE `" . $this->From . "` SET " . $UpdateClause;
		if ($WhereClause<>"") {
			$Rq .= " WHERE " . $WhereClause;
		}

		$this->RAZ();
		return $Rq;
	}

	// méthode de construc de requete Delete
	function Supprime() {
		$WhereClause = "";
		foreach($this->StrucTable as $k => $v) {
			if ($this->Table[$v]["S"] == "1") {
				$WhereClause .= $this->Table[$v][0] . "=" . $this->Table[$v]["V"] . " AND ";
			}
		}

		$WhereClause = substr($WhereClause, 0, strlen($WhereClause)-5);
		$Rq="DELETE FROM ". $this->From;;
		if ($WhereClause<>"") {
			$Rq .=  " WHERE " . $WhereClause;
		}
		$this->RAZ();

		return $Rq;

	}

	// méthode de construction de requete Insert
	function Insert() {
		$InserChamp = "";
		$InserValeur = "";

		foreach($this->StrucTable as $k => $v) {
			if ($this->Table[$v]["S"] == "1") {
				$InserChamp .= "" . $this->Table[$v][0] . ", ";

				$Valeur = '';

				if ($this->Table[$v]["V"] <> "Not") {
					$Valeur = $this->Table[$v]["V"];
				}

				$InserValeur .= "'" . addSlashes($Valeur) . "', ";
			}
		}
		$InserChamp = substr($InserChamp, 0, strlen($InserChamp)-2);
		$InserValeur = substr($InserValeur, 0, strlen($InserValeur)-2);

		$this->RAZ();

		$Rq="INSERT INTO `" . $this->From . "` (" . $InserChamp . ") VALUES (" . $InserValeur . ")";

		return $Rq;
	}

	// méthode de remise à zéro :
	// pour tous les champs de la table sélectionné on dit
	// tous les champs ne sont plus sélectionner
	// tous les champs n'ont plus aucune valeur
	function RAZ() {
		foreach($this->StrucTable as $k => $v) {
			$this->Table[$v]["S"] = "Not";
			$this->Table[$v]["V"] = "Not";
		}
	}

	// Méthode de sélection du champs
	function SelectChamp($NomChamp) {
		$this->Table[$NomChamp]["S"] = 1;
	}

	// méthode d'affectation de valeur à un champs
	function ValeurChamp($NomChamp, $LaValeur) {
		$this->SelectChamp($NomChamp);
		$this->Table[$NomChamp]["V"] = $LaValeur;
	}
}


Comment ca marche : de la manière suivante :
créer une variable de type table
$Article = new Table("MaTable", "MaBase");

Le premier paramètre identifie la table sur la quelle vous allez lancer vos requête.

Ensuite vous voulez faire un select mais que de certain champ :
$Article->SelectChamp("Champ1");
$Article->SelectChamp("Champ3");
$Article->SelectChamp("Champ5");


maintenant faire executer la requete :
mysql_query($Article->Select("LaWhereClause", "LeOrderByClause", "LaGroupByClause"));


Pour de l'insert : on prend prend même objet puis on ecrit :
$Article->ValeurChamp("Champ1", "Valeur1");
$Article->ValeurChamp("Champ3", "Valeur3");
$Article->ValeurChamp("Champ5", "Valeur5");
mysql_query($Article->Insert());


Pour le delete :
Pour tout supprimer
mysql_query($Article->Supprime();)


Pour supprimer 1 ligne spécifique
$Article->SelectChamp("Champ1", "MaValeur");
mysql_query($Article->Supprime());


Updater :
toute la table
mysql_query($Article->Supprime());


un tuple de la table
$Article->ValeurChamp("Champ1", "MaValeur");
$Article->ValeurChamp("Champ1", "MaValeur");
mysql_query($Article->Supprime());


si vous souhaitez juste afficher la requete il suffit de replacer le mysql_query par un echo.

voila

si ça peut faire des heureux tant mieux
A voir également:

1 réponse

je vous remercie bcp mais y'aurait il pas un interface graphique qui nous empécherait de ecrire des ligne de commande et d'avoir affaire seulement avec la souri
0
cobax Messages postés 33 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 12 juin 2008 6
19 mai 2008 à 23:30
Sympa ta classe , faudrait tester quand même voir si on gagné vraiment du temps , mais c'est une bonne idée .

abdousow y a mieux tu paye qq'un et il fait tout .
0