[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Dec 2007
    Beiträge
    6
    Eigentlich sollte es so klappen. Nur hab ich noch irgendwo Fehler, weiß aber nicht welche.

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.427
    Hier steht etwas zu DB2 und PHP. Suche da einmal nach INOUT. Da steht, daß es anscheinend nicht geht, Parameterwerte zurückzugeben. Der Artikel ist aber auch schon etwas älter (von 2004 oder 2006).

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.787
    Wenn du einen Execute direkt ausführst sind automatisch alle Parameter IN.
    Wenn du Returnwerte einer Prozedur haben willst, musst du eine Prepare-Anweisung durchführen und die Paramter explizit vom Typ deklarieren.
    SQL weiß ja sonst nicht, wohin mit den Daten.

    Wie das in PHP geht weiß ich nicht.

    MyCmd = "call myproc parm(?, ?, ...)"
    Für jedes "?" musst du die Paramter zuweisen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.389
    falls PHP das nicht kann (was ich nicht weiß), dann bleibt immer noch der Weg über eine UDTF, oder eine Function; bei beiden Varianten kommt man an die Rückgabe über ein normales Select dran. Aber beim Design kriegen meine Nackenhaare jetzt schon Probleme, eine stored Procedure als ExUndHopp Objekt in der QTEMP ...

    D*B

    Zitat Zitat von Pikachu Beitrag anzeigen
    Hier steht etwas zu DB2 und PHP. Suche da einmal nach INOUT. Da steht, daß es anscheinend nicht geht, Parameterwerte zurückzugeben. Der Artikel ist aber auch schon etwas älter (von 2004 oder 2006).
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.017
    Hallo,

    also wir verwenden in solchen Fällen nur IN-Parameter und geben für die Output-Felder im SQLRPG-Programm ein Resultset zurück. Dieses Resultset kannst Du ja dann im PHP auslesen. Das funktioniert ohne Probleme.

    Gruß,
    KM

  6. #6
    Registriert seit
    Dec 2007
    Beiträge
    6
    Die Lösung für mein Problem findet man hier: PHP: PDO - Manual .

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.787
    Siehst du, Prepare und BindParam waren die benötigten Funktionen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Dec 2007
    Beiträge
    6
    Ja, aber diese PHP Data Objects kannte ich vorher nicht und dafür mussten wir auch erst was einspielen.

    Vielen Dank für eure Hilfe.

  9. #9
    Registriert seit
    Jan 2003
    Beiträge
    302

    PHP und call via sql procedure

    Zitat Zitat von David Beitrag anzeigen
    Die Lösung für mein Problem findet man hier: PHP: PDO - Manual .
    Hallo David,
    ich habe nun das gleiche Problem und kann als PHP-Neuling
    leider nichts mit "PDO" anfangen.

    Kannst du mir zeigen, wie der PHP-Code dann aussehen muss.

    Danke im Voraus !
    Peet

  10. #10
    Registriert seit
    Apr 2005
    Beiträge
    1

    PHP-AS/400 Programmaufruf mit Parameterrückgabe

    Hallo David,
    auch ich habe das gleiche Problem. Die Ausführung funktioniert, aber ich bekomme keinen Parameter von meinem aufgerufenem Programm auf der AS/400 zurück.
    Hier mein Testprogramm:

    try {
    $db = new PDO('odbc:AS400', conn_user, conn_password);
    } catch (Exception $e) {
    echo "Fehler beim Connect :" . $e->getMessage();
    }

    $parm1 = "'A'";

    $stmt = $db->prepare("CALL Bibliothek.Testprogramm($parm1)");
    $stmt->bindParam(1, $parm1, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000);

    if(isset($_POST['mail_abschicken']) && $_POST['mail_abschicken'] == 'Befehl auf der AS/400 aufrufen') {

    $stmt->execute();

    echo '
    ';
    echo 'Parm1 :' . $parm1;
    echo '
    ';
    }

    Der Parameter $parm1 bleibt auf A, obwohl das Programm auf der AS/400 ein B zurückgeben soll.

    Als ODBC-Treiber verwende ich den normalen iSeries Access ODBC Treiber.

    Du schriebst, dass ihr erst etwas einspielen musstet. Was war das denn?
    Bei mir ist die ganze PDO-Geschichte offenbar in meiner PHP-Installation schon dabei (PHP-Vers. 5.3.0).

    Auch ich arbeite mich in die mit PHP und As/400 Zugriffe ein.

    Danke für Deine Antwort.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.787
    Das normale CALL-Kommando kann keine Parameter zurückgeben.
    Wenn du die ODBC-Schnittstelle verwenden willst, musst du eine externe SQL-Procedure definieren (siehe ganz oben bei Create Pocedure) und diese dann aufrufen.

    Für PHP gibts aber eine AS/400-AddOn-Lib in der auch Programmaufrufe mit Parametern möglich sein sollen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jan 2001
    Beiträge
    853

    Smile

    Hallo zusammen,

    mit PDO und ODBC kenne ich micht nicht aus.
    Aber mit der i5_Toolkit Library geht es so:
    PHP-Code:
    function load_the_RPG_program_as_test($conn )
    {
            
    //*********************************************
            // Anmeldung vom Programm vorbereiten
            //*********************************************
            
    $desc=array(
                    array(
    "name"=>"p_delay",     "io"=>I5_INOUT"type" => I5_TYPE_CHAR"length"=>"1"),
                    array(
    "name"=>"p_xmldta",     "io"=>I5_INOUT"type" => I5_TYPE_CHAR"length"=>"32000"),
                     );
            
    $prog=i5_program_prepare("MK/A_PHPXML",$desc$conn );
                if (!
    $prog) {
                    
    display_error("i5_pgm_prepare");
                    exit();
                }
            
    //**************************************************************
            // Programmm starten
            // $parms sind die Werte die an das RPG übergeben werden
            // $retval damit werden die variablen vom RPG Programm gesetzt
            //**************************************************************
            
    $parms = array ("p_delay"=> $_POST['delay'],
                            
    "p_xmldta"=>' '
                            
    );
            
    $retval= array(    "p_delay"=>"thedelayparm",
                            
    "p_xmldta"=>"the_xml_from_rpg_program"
                            
    );
            
            
    $ret=i5_program_call($prog$parms$retval);
                    if (!
    $ret){
                           
    display_error("i5_pgm_call");
                            exit();
                       }

    return 
    $the_xml_from_rpg_program ;


    i5_program_close($prog);



    Gruß
    Michael

Similar Threads

  1. Frage zum Befehl STRPCCMD
    By stoerfang in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-01-13, 11:27
  2. Frage zu WDSC bzw. CODE400
    By Mr.iSeries in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 02-09-08, 11:16
  3. Antworten: 4
    Letzter Beitrag: 21-01-07, 21:46
  4. Frage zu SQL UserDefinedFunction
    By cbe in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 24-08-06, 18:30
  5. AS/400, PHP, Novell Server
    By Asti in forum NEWSboard Server Software
    Antworten: 3
    Letzter Beitrag: 07-12-05, 15:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •