Stored Procedures Anfänger (CFML)

Ronald Nickel

Legendäres Mitglied
Servus

nachdem ich nun öfters gelesen habe, dass Stored Procedures höhere Sicherheit bezüglich SQL-Injections bieten, möchte ich mich an dieses Thema vorsichtig heranwagen. Hierzu ein paar sich anfängertypische Fragen:

Wo genau werden die "abgelegten" Prozeduren gespeichert?
Ist das ablegen der Statements via PhpMyAdmin möglich?
Sind die Versionen von MySql und MyPhpAdmin relevant?
Gibt es eine gute Anleitung für "totally beginners"- vorzugsweise aus der CFML (Coldfusion) Fraktion?

Lieben Gruß
Ronny
 
ich kämpfe noch immer und versuche erst mal die Procedure direkt im PhpMyadmin SQL-Fenster einzugeben


CREATE PROCEDURE ProcName()
BEGIN
SELECT * FROM MyTable;
END;


Er bemängelt ständig einen Synthayfehler
Ist es überhaubt möglich eine Procedur so in MySql abzulegen oder bin ich total auf dem Holzweg?
MySQL-Client-Version: 5.0.51a

Gruß Ronny

 
Sehr einfacher Syntaxfehler, Du beendest den ersten Aufruf bei ersten Semikolon, um Ergo muss du den Delimiter ändern:

CODE DELIMITER //
CREATE PROCEDURE ProcName()
BEGIN
  SELECT * FROM MyTable;
END//
DELIMITER &#59;


Das war von dem Beispiel, was ich gefunden habe, ich würde aber eher schauen, ob er es auch so nimmt:


CODE DELIMITER &#59;;
CREATE PROCEDURE ProcName()
BEGIN
  SELECT * FROM MyTable;
END;;
DELIMITER &#59;



Gruß,
Sascha


PS: Das mit der Sicherheit ist abhängig von der Umsetzung, werden Parameter oder Variablen übergeben, gibt es auch Mittel und Wege damit Unfug zu treiben.
 
ERROR: Unbekannte Interpunktion @ 61
STR: //
SQL: CREATE PROCEDURE ProcName()
BEGIN
SELECT * FROM MyTable;
END//


#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '//' at line 4
 
Tja, mehr als was in der MySQL Doku steht, kann ich ohne Testumgebung auch nicht von mir geben.
wink.gif


CODE mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
   -> BEGIN
   ->   SELECT COUNT(*) INTO param1 FROM t;
   -> END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter &#59;

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
 
Dein Fehler ist phpMyAdmin für das SQL-Statement zu benutzen, bzw. nicht auf der phpMyAdmin-Seite richtig zu schauen, da gibt es nämlich ein seperates Feld um den DELIMITER zu ändern.

Also entweder entsprechend abändern, oder back to the roots um auf Kommandozeile/Bash den Befehl mysql nutzen.
 
man soll nicht glauben aber das Saschas Hilfe habe ich es geschafft
Delimiter auf "//" gestellt und dieses Statement eigegetragen:

CREATE PROCEDURE test2()
BEGIN
SELECT * FROM texte;
END

funktioniert, ABER....


nun scheitere ich an der Übergabe eines Parameters der mit beispielsweise nur den Text mit der ID =2 zurückgibt. Wer parameterwert "@texte_id" wird natürlich beim Aufruf via Coldfusion übergeben

CREATE PROCEDURE test2()
@texte_id integer
BEGIN
SELECT * FROM texte
where texte_id = @texte_id integer;
END

PhpMyadmin weigert sich diese Procedure einzutragen

Was mache ich den nur wieder faslch?

Gruß Ronny
 
ja, ich weiß es ist schlimm aber nacht der 1000sten Synthaxvariante des sttements bin ich kurz davor aufzugeben.
Ich dachte der Paramtername muss mit einem "@" anfangen

CREATE PROCEDURE Procedurname()
@texte_id integer
....


auf www.mysql.com steht dann aber so ein Beispiel:

CREATE PROCEDURE `simpleproc`(OUT param1 INT)
BEGIN
SELECT COUNT(*) INTO param1 FROM t;
END

ich bin zu zeit ein wenig ratlos.

Gruß Ronny
 
Ja, wie bei einer normalen Funktion halt, nur dass eben der Typ hinten ansteht, und vorher eine Definition erfolgt in welcher Richtung die Variable gehen darf:

IN - Übergabe an die Procedure
OUT - Übergabe aus der Procedure ans Statement
INOUT - Vereint beides: Ein- und Ausgabe


Eigentlich recht simple, wenn man weiß was gemeint ist.
wink.gif
 
So, erste Erfolge (man soll nicht glauben)

CREATE PROCEDURE `test_x`(IN param1 INT)
BEGIN
SELECT * from texte where texte_id = param1;
END

CFML -aufruf klappt auch


Vielen Dank Sascha!!!

Gruß ronny
 
Zurück
Oben