Bonsoir,
J'ai une fonction qui crée les trigger qui me sont nécessaire sur une table
J'ai mis une fonction user() qui me permet de récupérer le code utilisateur dans une session.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }
Mes triggers fonctionnent bien sauf pour cette fonction user().
Comment puis-je passer une variable au trigger ?
Partager