2009-04-10 10 views
0

Ich möchte einen Trigger nur ausgelöst werden, wenn UPDATEs vom Benutzer initiiert werden (nicht ich Updates von der MySQL-Befehlszeile ausführen).Trigger ausgelöst, bedingt ausgelöst (MySQL/PHP)

Was ist der "Industriestandard", um dies zu erreichen? Ich habe erfolglos versucht, eine mit der Abfrage übergebene Variable zu erkennen (d. H. @ User_update = true), aber ohne Erfolg. Ein Kollege von mir schlug eine Möglichkeit vor, eine neue Spalte in die Tabelle einzufügen, die den Auslöser enthält: "fire_trigger" zum Beispiel. Und füllen Sie dies mit 'wahr', wenn Sie die SQL aus dem Code ausführen, und stellen Sie sicher, dass dies vorhanden ist, damit der Trigger ausgelöst wird.

Jede Hilfe sehr geschätzt!

Antwort

4

Deaktivieren Sie den Trigger, bevor Sie Befehlszeilenupdates durchführen und danach erneut aktivieren.

Aber Sie machen das falsch, konzeptionell.

Warum sollte der Trigger nicht ausgeführt werden, wenn Sie die Befehlszeile verwenden? Ich gehe davon aus, dass dies eine Art Audit-Trigger ist, der erfasst, wer eine Zeile aktualisiert hat. Sie an der Befehlszeile sind auch ein "wer".

Kommentar von OP:

Ja - guter Punkt! :) Es ist ein "dd/mm/jjjj hh: mm - User A" von "Jane" in "Joan" geändert. Ich möchte nur nicht, dass es die Verlaufstabelle während der Testphase füllt, wenn ich die Zeilen "manuell" aktualisiere.

Deaktivieren Sie entweder den Trigger oder löschen Sie einfach die hinzugefügten History-Zeilen danach. Noch besser, machen Sie Ihre Tests in einer separaten Datenbank, und machen Sie sich darüber keine Sorgen.

+0

Ja - guter Punkt! :) Es ist ein "dd/mm/jjjj hh: mm - User A" von "Jane" in "Joan" geändert. Ich möchte nur nicht, dass es die Verlaufstabelle während der Testphase füllt, wenn ich die Zeilen "manuell" aktualisiere. – cw84

0

Erstellen Sie 2 mysql-Benutzer: einen, der von der Anwendung verwendet wird (damit er Ihre Benutzer identifiziert), und einen, den Sie bei der Verbindung über den mysql-Client verwenden werden.

Suchen Sie im Aktualisierungstrigger nach dem Benutzer mit CURRENT_USER() und nehmen Sie nur dann Maßnahmen vor, wenn es der Anwendungsbenutzer ist.

Hoffe es hilft!

Verwandte Themen