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;
}
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
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 !!!
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...