Peut-on passer une variable à un trigger
Bonsoir,
J'ai une fonction qui crée les trigger qui me sont nécessaire sur une table
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| function triggerUpdate($nom_table, $creation = 0)
{
global $MySql;
$MySql_root = new MySql("localhost", "ma_base", "root", "password");
// Suppression du trigger
if(!empty($creation))
{
$queryString = "DROP TRIGGER ".$nom_table."_trigger_maj_insert";
$MySql_root->query($queryString);
$queryString = "DROP TRIGGER ".$nom_table."_trigger_maj_update";
$MySql_root->query($queryString);
}
// Chargement de la définition des colonnes de la tables
$requetes = $MySql->queryAllRecords("SHOW FULL COLUMNS FROM ".$nom_table);
// Constitution des conditions de comparaison
$comparaison = "";
foreach($requetes as $ligne)
{
// Récupération de la clé principale
if($ligne[4] == "PRI") $cle_principal = $ligne[0];
$comparaison .= " OLD.".$ligne[0]." != NEW.".$ligne[0]." OR";
}
$comparaison = substr($comparaison, 0, -2);
// Détection de la présence du trigger. Ne pas le recréer s'il existe
$queryString = "SELECT EVENT_MANIPULATION
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_NAME = '".$nom_table."_trigger_maj_insert'";
$presence = $MySql->queryAllRecords($queryString);
if(empty($presence))
{
$queryString = "CREATE TRIGGER ".$nom_table."_trigger_maj_insert
AFTER INSERT ON ".$nom_table."
FOR EACH ROW BEGIN
IF NEW.".$cle_principal." != 0
THEN
INSERT INTO ".$nom_table."_trigger_maj
(".$cle_principal.", user, date_creation)
VALUE (NEW.".$cle_principal.", user(), CURDATE());
END IF;
END
";
$MySql_root->query($queryString);
}
// Détection de la présence du trigger. Ne pas le recréer s'il existe
$queryString = "SELECT EVENT_MANIPULATION
FROM INFORMATION_SCHEMA.TRIGGERS
WHERE TRIGGER_NAME = '".$nom_table."_trigger_maj_update'";
$presence = $MySql->queryAllRecords($queryString);
if(empty($presence))
{
$queryString = "CREATE TRIGGER ".$nom_table."_trigger_maj_update
AFTER UPDATE ON ".$nom_table."
FOR EACH ROW BEGIN
IF ".$comparaison."
THEN
UPDATE ".$nom_table."_trigger_maj
SET user = user(),
date_modification = CURDATE()
WHERE ".$cle_principal." = NEW.".$cle_principal.";
END IF;
END
";
$MySql_root->query($queryString);
}
} |
J'ai mis une fonction user() qui me permet de récupérer le code utilisateur dans une session.
Mes triggers fonctionnent bien sauf pour cette fonction user().
Comment puis-je passer une variable au trigger ?