kruemeltee: PLSQL Procedure mit PHP starten?

Hallo Leutz,

ich häng gerade was an meiner Datenbank und heute im Unterricht kam dann die Aufgabe das wir mal probieren sollen eine Procedure mit PHP zu starten.
Denk ich kann ja nicht so schwer sein, jedoch will sich die Procedure nicht starten lassen, schade.

  
	$query='execute newsong(\''.$_POST["v_name"].'\',\''.$_POST["v_genre"].'\','.$albumid.')';  
	$stmt = oci_parse($con,$query);  
	oci_execute($stmt);  
	oci_commit($con);  

die Variablen werden durch ein Formula eingefügt. Jetz weiß ich nicht ob der nicht mit dem execute klar kommt (hab in anderen Foren "bgin" gelesen?!) da ja die Query funktioniert. Also muss irgendwie was mit dem execute der query nicht in ordnung sein oder oci_parse kommt damit nicht klar.

würd mich über lösungsanregungen freuen. :D

Timmy. :D

  1. Hi!

    $query='execute newsong(\''.$_POST["v_name"].'\',\''.$_POST["v_genre"].'\','.$albumid.')';  
    

    $stmt = oci_parse($con,$query);
    oci_execute($stmt);
    oci_commit($con);

    
    > die Variablen werden durch ein Formula eingefügt.  
      
    Du hast doch bei OCI sowieso Prepared Statements zu verwenden, also verwende auch den inklusiven Platzhaltermechanismus, anstatt die Werete einfach so einzufügen und den Kontextwechsel dabei zu missachten.  
      
    
    > Jetz weiß ich nicht ob der nicht mit dem execute klar kommt (hab in anderen Foren "bgin" gelesen?!) da ja die Query funktioniert. Also muss irgendwie was mit dem execute der query nicht in ordnung sein oder oci\_parse kommt damit nicht klar.  
      
    Befrag die Rückgabewerte der Funktionen, und wenn die einen Fehler signalisieren, frag oci\_error() nach dessen Text.  
      
      
    Lo!
    
  2. Hallo,

    Denk ich kann ja nicht so schwer sein, jedoch will sich die Procedure nicht starten lassen, schade.

    und welche Fehlermeldungen erhältst Du?

    $query='execute newsong(''.$_POST["v_name"].'',''.$_POST["v_genre"].'','.$albumid.')';

    Es ist eine schlechte Idee, SQL dynamisch mit ungeprüften und unbehandelten Benutzereingaben zusammenzubauen. Du missachtest den Kontextwechsel und wirst anfällig für SQL-Injection. Dabei wäre es doch so einfach, Du könntest die entsprechenden oci_bind-Funktionen wie [link:http://www.php.net/manual/de/function.oci-bind-by-name.php@title=oci_bind_by_name()] nutzen.

    $stmt = oci_parse($con,$query);
    oci_execute($stmt);
    oci_commit($con);

    Welche Anweisung schlägt fehl, welche Fehlermeldung erhältst Du? Warum fragst Du nicht nach Oracle-Fehlern ([link:http://www.php.net/manual/de/function.oci-error.php@title=oci_error()])?

      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Danke, ich hab mich was durch die oci_binb_by_name Funktion geschaufelt und bin dann auch zum ergebnis gekommen, vielen dank. :D