PHP und Stored Procedures in MySQL

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:

  1. Ich lösche die Prozedur, falls vorhanden:
    $sql = „DROP PROCEDURE IF EXISTS test_sp()“;
    $result = mysql_query($sql);
  • Das funktioniert.
  1. 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).
  1. 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.

Servus,

hmmm… ist mir noch nicht untergekommen das Problem. Würde sagen es ist Versions- und Plattformabhängig.

Ich würde den Hebel hier ansetzen:

Der Testuser hat erstmal alle Rechte.

Einen „normalen“ User anlegen und schrittweise die Rechte anheben bis es klappt.

Gruß
widecrypt

Hallo,

also Versionen:
MySQL 5.5.8
PHP 5.3.4

Das mit den Rechten leuchtet mir nicht ein. Wenn der User alle Rechte hat, dann darf er ja auch alles machen - warum soll er dann eine Prozedur nicht löschen können. Mehr als Alles kann ich ihm ja nicht geben. Ich habe jetzt die Rechte soweit eingeschränkt, bis andere Fehler auftauchten.
Daten: SELECT, INSERT, UPDATE, DELETE
Struktur: CREATE ROUTINE, ALTER ROUTINE, EXECUTE
Das ist nach meinem Verständnis auch das was ich an notwendigen Rechten erwarten würde.

Viele Grüße, lo.

Nachtrag:

Mit einer „Stored Function“ funktioniert das Ganze. (Erstellen, nutzen und Löschen per PHP Script). Ich weiß zwar immer noch nicht warum …

lo.

Moin moin,

  1. Ich lösche die Prozedur, falls vorhanden:
    $sql = „DROP PROCEDURE IF EXISTS test_sp()“;
    $result = mysql_query($sql);
  • Das funktioniert.

Lass das doch einfach mal weg . Vielleicht wird diese auswertung unten irgendwie genommen . Wenn du eh löscht brauchst du vorher ja nicht prüfen.