New Function
| From: | boris sanegre | Date: | Tue, 03 Jun 2003 10:46:54 +0000 |
| Subject: | New Function | ||
| Groups: | php.mirrors | ||
| Request: | Send a blank email to php-mirrors+get-18487@lists.php.net to get a copy of this message | ||
Hi.
Can you post this function on 'http://www.php.net/manual/fr/function.mysql-result.php'
I think it's too long.
Thank you very much for your website.
Boris Sanègre - FRANCE
/*
Mise à jour ou insertion d'un enregistrement dans une table MySQL
*****************************************************************
Faites vous plaisir, optimsez cette fonction !
Créé par :
Boris Sanègre - 2003.06.02
Amélioré par:
C'est à vous ...
Merci à: HAPedit, www.php.net
Cette fonction permet d'effectuer des opérations de base sur un
enregistrement d'une table MySQL. Les opérations sont définit par
la variable $operation dont voici les possibilités actuelles:
- update : Effectue une mise à jour de l'enregistrement
- delete : Supprime l'enregistrement
- rewrite : Réécrit entièrement l'enregistrement en gardant le "$id_nom_table"
- copy : copie l'enregistrement en affectant un nouvel identifiant.
Seule la variable "$id_nom_table" est prise en compte
- clone : Créé un doublon de l'enregistrement "$id_nom_table"
- insert : Créé un nouvel enregistrement. (Ne tient pas compte de la variable
"$id_nom_table")
*/
function mysql_table_operation($nom_table, $operation)
{
/*
Dictionnaire des variables:
***************************
*/
$bdd = $GLOBALS['bdd']; //Variable Globale définit dans /lib/session.php
et
//représente le nom de la base de données
$nom_table; //Nom de la table à charger
$operation; //update, delete, rewrite, copy, clone ou insert
$premiere_virgule_update = 1; //Permet de supprimer les virgules en trop dans la
//construction des requêtes UPDATE
$premiere_virgule_insert = 1; //Permet de supprimer les virgules en trop dans la
//construction des requêtes INSERT et REWRITE
$premiere_operateur_where = 1; //Permet de supprimer les AND en trop dans la
//construction des WHERE
$premiere_operateur_retour = 1; //Permet de supprimer le '&' en trop dans la
//construction du retour de la fonction
$return = ''; //Valeur que renvoi la fonction
/*
Corps de la fonction
********************
*/
//Initialisation des requêtes
$req_update = "UPDATE " . $nom_table . " SET ";
$req_where = " WHERE ";
$req_delete = "DELETE FROM " . $nom_table;
$req_insert = "INSERT INTO
" . $nom_table . " (";
$req_insert_values = "VALUES (";
$req_rewrite = $req_delete;
$req_copy; //Reste à créer
$req_clone; //Reste à créer
//Récupération des variables
$fields = mysql_list_fields($bdd, $nom_table);
$propriete = mysql_query("DESC $nom_table");
$num_fields = mysql_num_fields($fields);
//Recherche des clefs de la table
while ($rows1=mysql_fetch_array($propriete))
{
//Création de la variable potentiellement PRIMARY KEY
$primary_key = $rows1[Field];
//Est-ce que ce champ est une clef et qu'une variable est définit
if (
($rows1[Key]=="PRI") AND
(isset($GLOBALS["$primary_key"]))
)
{
//Affectation de la valeur de la variables
$$primary_key = $GLOBALS["$primary_key"];
//Intégration de la clef PRIMAIRE dans les requêtes
$operateur = " AND ";
if ($premiere_operateur_where)
{
$operateur = '';
}
$premiere_operateur_where = 0;
$req_where .=$operateur
. $primary_key
. "="
. $$primary_key
;
//Construction du lien de retour de fonction
$operateur = "&";
if ($premiere_operateur_retour)
{
$operateur = '';
}
$premiere_operateur_retour = 0;
$return .=$operateur . $primary_key . "=" . $$primary_key;
//Effacement des clefs pour éviter de les retrouver dans la suite des requêtes
switch ($operation)
{
case 'insert':
case 'copy' :
$$primary_key = '';
break;
}
}//Fin de Recherche de la clef sur ce champ
}//Fin de recherche des clefs
//Intégration des variables dans les requêtes
for ($i = 0; $i < $num_fields; $i++)
{
//Récupération du nom des variables
$nom_variable = mysql_field_name($fields, $i);
//Vérification de la déclaration de cette variable,
if (isset ($GLOBALS[$nom_variable]))
{
//Déclaration en interne dans cette fonction
$$nom_variable = $GLOBALS[$nom_variable];
//Construction des requêtes
//Requête UPDATE
$virgule = ", ";
if ($premiere_virgule_update)
{
$virgule = '';
}
$premiere_virgule_update = 0;
$req_update .=$virgule
. "`"
. $nom_variable
. "`='"
. $$nom_variable
. "' "
;
//Requête INSERT et REWRITE
$virgule = ", ";
if ($premiere_virgule_insert)
{
$virgule = '';
}
$premiere_virgule_insert = 0;
$req_insert .=$virgule
. "`"
. $nom_variable
. "`"
;
$req_insert_values .=$virgule
. "'"
. $$nom_variable
. "'"
;
}
}//Fin de la construction des requêtes
//Finalisation des requetes
//Requête UPDATE:
$req_update .= $req_where;
//Requête DELETE:
$req_delete .= $req_where;
//Requête INSERT:
$req_insert .= ")"
. $req_insert_values
. ");"
;
//Requête REWRITE:
// un DELETE, puis un INSERT
//Requête COPY:
$req_copy;
//Requête CLONE:
$req_clone;
//Exécution des requêtes
switch ($operation)
{
case 'update' :
mysql_query($req_update);
break;
case 'delete' :
mysql_query($req_delete);
break;
case 'insert' :
mysql_query($req_insert);
break;
case 'rewrite':
mysql_query($req_delete);
mysql_query($req_insert);
break;
case 'copy' :
mysql_query($req_copy);
break;
case 'clone' :
mysql_query($req_clone);
break;
}
//Renvoi de la fonction
switch ($operation)
{
case 'copy' :
case 'insert' :
$return = "id_" . $nom_table . "=" . mysql_insert_id();
break;
default:
$return;
break;
}
return $return;
}//Fin de la fonction "operation_mysql"