Fonction PHP : ConstruireRequete()

Ici, vous pouvez voir (et copier/coller) le code complet de la fonction PHP ConstruireRequete(). N'hésitez pas voter pour cette fonction si elle vous plaît ou si vous vouv en servez !

ConstruireRequete() ajouté le 2009-07-03 15:49:03 par Androme

function ConstruireRequete($type,$cible,$tab_champs,$critere="1",$forcer_maj=1)
{
//$tab_champs est un tableau avec {type de données}|{nom de la colonne}|{valeur}
$requete="";
 	if(is_array($tab_champs))
	{

		$maj_row=array();
		$add_row=array();
		$add_row_cols=array();
		
			foreach($tab_champs as $item)
			{
				$temp=explode("|",$item);
				if($temp[2]<>"")
				{
					array_push($add_row_cols , $temp[1]);
											
					switch($temp[0])
					{
						case 'string':
						case 'date':
							array_push($maj_row ,$temp[1] ."='" .$temp[2] ."'");
							array_push($add_row ,"'" .$temp[2] ."'");
						
						break;
						
						case 'int':
						case 'checkbox':
						case 'float':
							array_push($maj_row ,$temp[1] ."=" .$temp[2] );
							array_push($add_row , $temp[2] );
						break;
					}
					
				}elseif($temp[0]=='checkbox'){
				
						array_push($add_row_cols , $temp[1]);
						$checke=0;
			            if($temp[2]==1) $checke=1;
					   	array_push($maj_row,$temp[1] ."=" .$checke);
	   					array_push($add_row , $checke );
						
						
				}elseif($forcer_maj==1 && $type=='UPDATE')
				{
					//On force la mise à jour
					array_push($maj_row ,$temp[1] ."=NULL");

				}
				
			}
			
		if(count($maj_row)>0)
		{	
			if($type=='UPDATE')
			{
				$requete="UPDATE " .$cible ." SET " .implode(',',$maj_row) ." WHERE " .$critere;
				
				
			}elseif($type=="INSERT")
			{
				$requete="INSERT INTO " .$cible ."(" .implode(',',$add_row_cols) .") VALUES (" .implode(',',$add_row) .")";
			}
		}
	
	
	}

return $requete;

}

Voter pour cette fonction


Le but est de construire une requête MySQL à partir des éléments suivants :
$type: type de requête (INSERT ou UPDATE)
$cible: table concernée
$tab_champs: les champs intervenant dans la requête
$critere= filtre dans le cas d'un update
$forcer_maj= si vous voulez qu'un champs soit mis à NULL

Commentaires sur la fonctions php

laurentj 07/07/2009 à 14:45

Il serait bien imprudent d'utiliser cette fonction car :

1) totalement non sécurisée (aucun échappement des valeurs ou autre). Vive le SQL injection !
2) pas performante. Pourquoi fournir les éléments dans une chaine alors que les fournirs dans un tableau éviterait de splitter...

Déçu 10/07/2009 à 15:16

Idem que ci-dessus : ne publiez ce type de fonction que quand vous avez étudié la question à fond !

A part donner de mauvaises habitudes de développement, et créer des failles de sécurité, vous n'apportez vraiment rien de bon à vos lecteurs !!!