Constucteur de requete SQL en php

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

1 réponse

  1. 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
    1. 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 .