Seite 1 von 1

Frage zu MySql und Trigger

Verfasst: 07.04.2014, 13:59
von xoni
Hallo liebe Leser,

Folgendes Szenario.

Gegeben seien 2 Tabellen - HISTORY und EVENT
Für die Tabelle EVENT existiert ein Trigger, der die Aufgabe hat,
sämtliche Aktionen (Insert, Update und Delete) in die Tabelle HISTORY abzulegen.

Das klappt soweit auch alles. Mein Problem dabei:

Der Trigger ist ja ein Datenbankobjekt welcher nur mit der Tabelle EVENT verbunden ist.
Das ganze System (MVC) ist in PHP programmiert.
Dort ist es u.a. möglich den aktuell angemeldet Nutzer mit $this->user->getUserName() zu ermitteln.

Zielt soll sein, das der Nutzer der eine Aktion an der Tabelle EVENT durchführt durch den Trigger in die Tabelle HISTORY geschrieben wird.

Wie komme ich an die Daten des Nutzers ran?
Der Trigger selbst kann mit ja mit $this->user->getUserName() nichts anfangen.

Gibt es dafür eine (einfache) Lösung?

Verfasst:
von

Verfasst: 07.04.2014, 16:06
von nerd
Geht ueber einen umweg, indem du fuer jeden PHP user auch noch einen mysql user (so nach dem muster phpuser_123) anlegst. Sobald sich ein user anmeldet, wechselst du die db-verbindungsdaten in deiner php-config von mysql:webuser (dein standard db account ueber welchen derzeit alle verbindungen laufen) auf mysql:phpuser_123 .

Wenn ein neuer user auf der webseite angelegt wid, muesstest du halt in mysql zusaetzlich noch einen neuen account phpuser_123 mit den richtigen berechtigungen anlegen.

Fuer deinen trigger kannst du dann den mysql-user mit SELECT USER(); abfragen.

Verfasst: 07.04.2014, 17:51
von xoni
indem du fuer jeden PHP user auch noch einen mysql user
Hallo nerd,

vielen Dankl für Deinen Tipp;
ich denke, dass könnte ein richtiger Weg werden.
Ich hatte auch schon überlegt, nach einem Login
die Daten global von Mysql speichern, und vom Trigger auslesen
zu lassen. So richtig "toll" finde ich das alles nicht - das ist ein bischen wie
von hinten durch den Rücken ins linke Auge :wink:

Ich fang mal an zu tippen....

Verfasst: 07.04.2014, 19:27
von umwelt
spar dir den trigger und machs per PHP. :)

Verfasst: 08.04.2014, 17:18
von xoni
spar dir den trigger und machs per PHP.
Naja, der Trigger hat schon einige Vorteile gegenüber einer
Lösung in PHP. Der Trigger wird immer ausgelöst, egal ob aus
der Anwendung heraus, über eine Konsole oder über phpMyAdmin.

Mit geht es darum zu tracken, welche Datensätze geändert wurden (vorher/nachher)
und nicht ob welche geändert wurden.
Eine Lösung in PHP würde bedeuten, bei einer Änderung zuerst die alten, dann die
neuen Sätze auszulesen und sie dann zu vergleichen.

Der Trigger hält dafür OLD und NEW bereit - nice.

Vielleicht gibt es ja noch andere Lösung um Änderungen in einer
Tabelle zu protkollieren - ich bin kein Profi und von daher für jeden
Wink dankbar. So long...

Verfasst: 19.04.2014, 23:23
von umwelt
hast du nicht eine mysql-klasse? dann bau das doch dort ein.
ich nutze trigger relativ selten, weil es aus meiner sicht nach längerer zeit und im größeren team immer schwerer zu überblicken ist, wo noch diverse zugriffe auf die datenbank erfolgen...da bin ich froh, wenn es aus einer klasse aus erfolgt...