MySQL Trigger AFTER INSERT-trigger + UDF sys_exec() Problem

Problem: ich habe eine Tabelle, die hält bestimmte Datensätze. Nach dem insert ausgeführt wurde, möchte ich nennen, in einem externen Programm (php-script) über die MySQL-sys_* SEF.
Nun, das Problem - die trigger habe ich übergibt die ID des Datensatzes an das Skript.
Wenn ich versuche, ziehen Sie die Daten aus, die über das Skript, bekomme ich 0 Zeilen.
Während meiner eigenen Tests, ich kam zu dem Schluss, dass der trigger ruft das php Skript auf und übergibt die Parameter VOR dem eigentlichen einfügen aufgetreten, so bekomme ich keine Datensätze für die angegebene ID.
Getestet hab ich das auf MySQL 5.0.75 und 5.1.41 (Ubuntu OS).
Kann ich bestätigen, die Parameter übergeben bekommen, um das Skript vor dem eigentlichen einfügen passiert, da habe ich sleep(2); an mein php-Skript und ich habe die Daten richtig.
Ohne sleep (); - Anweisung, ich erhalte 0 Datensätze für die angegebene ID.

Meine Frage ist, wie dieses problem zu lösen, ohne hartcodieren irgendeine Art von Verzögerung innerhalb des php-Skript?
Ich habe nicht die Freiheit, unter der Annahme, dass 2 Sekunden (oder 10 Sekunden) ausreichend verzögern, so will ich alles fließen, "natürlich", wenn ein Befehl abgeschlossen ist - der andere wird ausgeführt.

Bin ich davon ausgegangen, dass, wenn der trigger-Typ ist NACH dem EINFÜGEN, alles, was in dem Körper der trigger wird ausgeführt, nachdem MySQL tatsächlich fügt die Daten.

Table-layout:

CREATE TABLE test (
id int not null auto_increment PRIMARY KEY,
random_data varchar(255) not null
);

Trigger layout:

DELIMITER $$

CREATE TRIGGER `test_after_insert` AFTER INSERT ON `test` 
FOR EACH ROW BEGIN

SET @exec_var = sys_exec(CONCAT('php /var/www/xyz/servers/dispatcher.php ', NEW.id));
END;
$$

DELIMITER ;

Disclaimer: ich weiß, die Fragen der Sicherheit bei der Verwendung von sys_exec Funktion, mein problem ist, dass die MySQL nicht, legen Sie ZUNÄCHST und rufen Sie DANN das Skript mit den notwendigen Parametern.
Wenn jemand kann etwas Licht auf, wie man dieses Problem beheben oder hat das einen anderen Ansatz, der nicht die SELECT INTO OUTFILE und mit FAM - wäre ich sehr dankbar. Vielen Dank im Voraus.

  • Bitte klären: Das PHP-script dispatcher.php feuert up, stellt eine client-Verbindung zu Ihrem Daten-Basis, macht dann eine Abfrage? Ist das richtig?
  • Daten eingelegt wird. Der Trigger wird aufgerufen und übergibt die ID für das dispatcher.php. Dispatcher.php ruft die Zeile und sendet Sie an den browser. Grund, warum ich nicht senden der gesamten Daten auf einfügen wird, da werde ich einfügen in eine Tabelle, aber ich zieh die Daten aus der view - also ich weiß nicht, alle die Spalten werde ich mit jederzeit.
  • So, dispatcher.php hat seine eigene client-Verbindung zu mySQL? Das klappt nicht zuverlässig, weil der insert - / update-Transaktion in der trigger ausgeführt wird, nicht vollständig, bis nach dem Auslöser gemacht. So, dispatcher.php sieht entweder inkonsistent oder pre-Transaktions-Daten. Es ist jedenfalls, wie Essen ein Stück Kuchen, während der Kuchen ist noch im Ofen. Auslöser soll der Aufenthalt in den Datenbank-server.
  • Entweder du hast nicht gelesen, was ich schrieb oder nicht, die Frage verstehe, sehen Sie eine Frage, nachdem ich erklärt habe in der sehr einfachen Weise, was Los ist. Ich habe nicht die Absicht, unhöflich zu sein, aber Ihre Antwort ist nicht zu helfen mir in keiner Art und Weise.
  • haben Sie jemals herausfinden?
  • Sie können beginnen, um es zu testen per MySQL-CLI mysql> SELECT sys_exec('php /var/www/xyz/servers/dispatcher.php 100'); wenn es nicht funktioniert stellen Sie sicher, Sie haben 'rwx' - Berechtigung für die mysql-user. Wenn nicht, können Sie einen Blick chmod oder chown für dispatcher.php Datei.

InformationsquelleAutor Mihael | 2010-09-06
Schreibe einen Kommentar