echo $begrüßung;
Ich krieg den Trigger nicht eingetragen bei MySQL.
Hat noch jemand eine Idee, wie man es machen muss?
Der phpMyAdmin hat, so wie es aussieht, noch Probleme beim Anlegen von Triggern und/oder Stored Procedures. Das Auftrennen der Statements an den ; ist hier kontraproduktiv. Es gelang mir aber zumindest einfache Trigger anzulegen:
create trigger trigger_name before insert on table_name for each row set new.feld_name=irgendwas
Trigger mit mehr als einem Statement, die BEGIN ... END enthalten, scheitern am ;. Die konnte ich zumindest über das CLI anlegen, wobei hier die Geschichte mit dem DELIMITER zu beachten ist.
delimiter #
create trigger trigger_name before insert on table_name for each row begin set new.feld_name=irgendwas; end#
delimiter ;
Für dein anderes Problem, des Abbrechens eines UPDATE- oder INSERT-Vorgangs, gibt es anscheinend keine offizielle Lösung. Der Tipp in den Userkommentaren, man solle ein RETURN FALSE verwenden, wird abgelehnt, weil RETURN nur für Funktionen verwendet werden kann. Es gibt ein LEAVE-Statement, aber das beendet nur den Trigger, nicht den gesamten Vorgang. Statements um einen Fehler zu erzeugen (raise oder throw und dergleichen) fand ich nicht. Meine Versuche, einen absichtlichen Fehler auszulösen, um ein Update abzubrechen, verliefen zwar letzlich erfolgreich, aber schön ist was anderes. Erster Versuch: Division durch 0. Sollte eigentlich immer was ganz Fatales sein. Aber denkste. Bei meiner Server-Konfiguration kam immer NULL raus. Diese NULL in Felder einzutragen, die NOT NULL stehen, machten daraus den Default-Wert und trugen den ein. Die Server-Konfiguration zu ändern scheint zwar erfolgversprechend zu sein, doch das ist - so nehme ich an, ich hab da nicht weitergeforscht - nicht jedem Anwender möglich. Einer UNSIGNED Spalte einen negativen Wert zu übergeben verursachte nur ein leises Jammern in Form einer Warnung inklusive stillschweigendem Umschreiben des eingefügten Wertes nach 0. Erst das Einfügen eines bereits vorhandenen Wertes in eine UNIQUE Spalte in einer anderen Tabelle brachte einen Fehler.
CREATE TABLE trigger\_error
(
x
int(11) NOT NULL,
UNIQUE KEY x
(x
)
) ENGINE=MyISAM;
INSERT INTO trigger\_error
VALUES (1);
delimiter #
create trigger triggerx before insert on tablex for each row
begin
if old.feld <> new.feld then
insert trigger_error values (1);
end if;
end#
delimiter ;
Die DELIMITER-Statements müssen beim Ausführen der Statements über die MySQL-API, also z.B. mit den mysql-Funktionen aus PHP heraus, weggelassen werden, ebenso das abschließende #.
echo "$verabschiedung $name";