-
Eigentlich sollte es so klappen. Nur hab ich noch irgendwo Fehler, weiß aber nicht welche.
-
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).
-
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.
-
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 von Pikachu
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).
-
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
-
Die Lösung für mein Problem findet man hier: PHP: PDO - Manual .
-
Siehst du, Prepare und BindParam waren die benötigten Funktionen.
-
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.
-
PHP und call via sql procedure
 Zitat von David
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
-
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 '';
}
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.
-
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.
-
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
-
By stoerfang in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 24-01-13, 11:27
-
By Mr.iSeries in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 02-09-08, 11:16
-
By php27 in forum NEWSboard Server Job
Antworten: 4
Letzter Beitrag: 21-01-07, 21:46
-
By cbe in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 24-08-06, 18:30
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks