Die Frage ist, was du dir von sowas versprichst? So oder so würde in der Datenbank immer ein INSERT ausgeführt. Eine Prozedur würde dir eventuell ein wenig Komplexitätsarbeit abnehmen, wenn du in mehr als eine Tabelle schreiben musst. Und natürlich könnte man auch Validierung der übergebenen Daten dort reinschreiben.
Das aber würde dann bedeuten, dass ein größerer Teil deiner
Programmlogik nicht mehr in PHP programmiert ist, sondern in MySQL. Das »» ist nicht unbedingt so schön. Es ist wahrscheinlich, dass deine
Anwendung niemals in einen Nutzungsbereich gerät, wo Performance eine
Rolle spielt, aber trotzdem will ich anmerken, dass es aus dieser Sicht »» sehr hinderlich ist, wenn die Datenbank noch mehr tun muss, als nur die »» Daten schreiben zu müssen.
Der Ansicht bin ich eigentlich auch, ich dümpel nur grad im Praktikum rum und mein "Chef", für den ich eine Anwendung zur Arbeitszeitenerfassung bauen soll, ist fest davon überzeugt, dass "alles" über SQL laufen soll.
Dein oben gezeigter Code enthält allerdings etliche sofort
offensichtliche Schwachstellen:
- Du hast keinerlei Escaping in dein Query eingebaut. Damit zerschießt »» dir der User dein SQL-Statement potentiell - außer es ist
magic_quotes_gpc = on gesetzt. Diese Magic Quotes sind aber auch ein
ekliges Feature, denn sie retten zwar deinen Query, aber stören bei
jeder sonstigen Ausgabe von Variablen. magic_quotes_gpc können auch
abgeschaltet sein - wenn dein Provider an der Einstellung was ändert,
oder du den Provider wechselst, wäre dein Skript plötzlich ungeschützt.
Keine Sorge, das steht noch auf meiner Liste :)
- Deine Fehlerbehandlung ist ziemlich rauh. Immerhin ist sie vorhanden, »» aber "Bitte Admin informieren" ist nicht wirklich das, was man sich als »» Admin wünscht. Weil das die User nicht hinkriegen. PHP bietet etliche
Methoden, Fehler zu loggen und so für den Admin zu konservieren.
Natürlich könnte man das noch wesentlich hübscher gestalten, war für mich fürs Erste aber eher nebensächlich, daher nur diese Knappe Angabe :)
Würde die Prozedur dann so aussehen?
delimiter //
drop procedure sql_insert;create procedure sql_insert ()
begin
INSERT INTO DATENBANK.TABELLE (user, task, credate) values
('$User', '$task', CURRENT_DATE());
end;
> >
> > Wenn ja, wie rufe ich diese Prozedur dann in PHP auf?
>
> Zu deiner Prozedur kann ich nix sagen. Hab ich noch nicht ausprobiert, war in meinen Projekten noch nicht notwendig - eben aus oben genannten Gründen.
>
> Der Aufruf aber geschieht ganz simpel über einen MySQL-Query, der die
> Prozedur aufruft. Näheres dazu steht in der MySQL-Dokumentation. Da du »» dich offenbar in die Programmierung von SQL stürzen willst, bleibt dir »» ohnehin nichts anderes übrig, als dich mit der Doku auseinanderzusetzen.
Problem ist nur, dass ich gar nicht erst eine Prozedur erstellen kann.
~~~sql
DELIMITER //
DROP PROCEDURE sql_insert;
CREATE PROCEDURE sql_insert()
begin
SELECT * FROM TABELLE;
end;
Selbst diese einfach Prozedur lässt sich nicht erstellen und gibt mir als Fehler aus, dass ich die Syntax bei '; überprüfen soll...