Bonsoir,

J'ai une fonction qui crée les trigger qui me sont nécessaire sur une table

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);
    }
}
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 ?