Hallo in die Runde.
Da die Frage bei PHP beginnt, habe ich dieses Forum gewählt, bin aber nicht sicher, ob es nicht eher in Datenbank Programmierung gehört.
Also: Ich versuche gerade mit Stored Procedures in einer MySQL Datenbank zu experimentieren. Nach ersten erfolgreichen manuellen Versuchen (direkte Eingabe in PHPMyAdmin) möchte ich nun Stored Procedures per PHP Script erzeugen. Das funktioniert bisher nur teilweise:
- Ich lösche die Prozedur, falls vorhanden:
$sql = „DROP PROCEDURE IF EXISTS test_sp()“;
$result = mysql_query($sql);
- Das funktioniert.
- Ich erstelle die Prozedur wieder / neu:
$sql = „CREATE PROCEDURE test_sp()
BEGIN
…
END“;
$result = mysql_query($sql);
- Das funktioniert ebenfalls, ich kann die Prozedur mit „CALL test_sp()“ aufrufen (manuell in PHPMyAdmin und per PHP Script).
- Ich möchte am Ende die Prozedur wieder löschen:
$sql = „DROP PROCEDURE test_sp()“;
$result = mysql_query($sql);
- Das funktioniert aber nicht. Die Prozedur ist auch nach Ablaufende des Scripts weiter vorhanden. Bei einem erneuten Aufruf wird sie gelöscht und neu erzeugt, aber sie wird nicht am Ende gelöscht. Der Testuser hat erstmal alle Rechte. Daran kann es nicht liegen (und dann würde ja auch der erste Löschaufruf nicht funktionieren). Ich habe es auch mit dem „IF EXISTS“ probiert (exakt gleiche Anweisung wie unter 1.) aber auch das ändert nichts.
Ein bisschen Herumprobieren brachte bis jetzt folgendes Ergebnis: Wenn ich die Prozedur per PHP-Script erzeuge und sofort wieder lösche, funktioniert das. Sobald ich aber eine andere der PHP MySQL-Funktionen aufrufe (mysql_fetch_row()), schlägt hinterher der Löschversuch fehl.
Etwas zum Hintergrund: Die Idee ist den Code der Stored Procedures mit dem Anwendungscode zu speichern und zu warten (und ggf. dynamisch anzupassen). Ich versuche das erstmal, da ich einige spezielle Funktionen zur Datenkonvertierung benötige, die in PHP sehr zeitintensiv ablaufen. Ich will heraus finden, ob das einen Zeitgewinn bringt. Aber unabhängig davon, ob es mich zum eigentlichen Ziel führt, sollte der o. g. Code eigentlich doch funktionieren.
Deswegen jetzt erstmal die Frage, ob jemand weiß, warum dieses Verhalten auftritt oder ein ähnliches Problem auch schon hatte.
Vielen Dnak im Voraus, lo.