Anmelden

View Full Version : Frage zum Programmaufruf von PHP aus



Seiten : [1] 2

David
02-04-08, 10:02
Hallo,
hab da mal eine Frage zum Programmaufruf aus PHP heraus.

Mein Problem ist folgendes: Ich würde gerne ein Programm auf der iSeries ausrufen, welches mit ein Benutzerkürzel vorschlägt und wieder zurückgibt.

Ich weiß, dass ich das Programm über eine Stored Procedure aufrufen muss. Diese wurde auch erzeugt mit dem Befehl:


$proc_query = "CREATE PROCEDURE QTEMP.U00073 (INOUT :VORNAME
CHAR(15), INOUT :NACHNAME CHAR(15), INOUT :USERR CHAR(3), INOUT :USERK
CHAR(3), INOUT :FEHLER CHAR(50)) LANGUAGE RPGLE NOT DETERMINISTIC NO SQL
EXTERNAL NAME OFFTES.U00073 PARAMETER STYLE GENERAL";

Die Prozedur wird dann auch auf dem System erstellt. Danach möchte ich mein Programm aufrufen, welches die 5 Parameter entgegennimmt:


$exec = odbc_exec($db, "CALL QTEMP.U00073('$vorname', '$nachname', '$refu',
'$user', '$fehlermeldung')");

Nun bekomme ich aber folgende Fehlermeldung:


<TABLE cellSpacing=0 cellPadding=0 width="95%" align=center border=0>Warning: odbc_exec() SQL error: [unixODBC][IBM][iSeries Access ODBC Driver][DB2 UDB]SQL0469 -
Attribut IN, OUT oder INOUT für Parameter 1 in Prozedur U00073 in QTEMP ungültig.,
SQL state S1000 in SQLExecDirect in [...]<TBODY></TBODY></TABLE>

Wo genau liegt mein Fehler?

Gruß
David

David
02-04-08, 10:10
Hm, nun ist alles so breit geworden, dass ich das nicht mehr editieren kann.

Pikachu
02-04-08, 10:14
Vielleicht können keine Werte zurückgegeben werden? Nimm' mal IN anstelle von INOUT. - Moment, du willst ja Werte zurückgeben. Vielleicht geht das so auf diese Art nicht?

David
02-04-08, 10:31
Eigentlich sollte es so klappen. Nur hab ich noch irgendwo Fehler, weiß aber nicht welche.

Pikachu
02-04-08, 10:56
Hier steht etwas zu DB2 und PHP (http://entwickler.com/itr/online_artikel/psecom,id,599,nodeid,62.html). 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).

Fuerchau
02-04-08, 11:07
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.

BenderD
02-04-08, 11:31
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


Hier steht etwas zu DB2 und PHP (http://entwickler.com/itr/online_artikel/psecom,id,599,nodeid,62.html). 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).

KM
04-04-08, 07:24
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

David
04-04-08, 09:03
Die Lösung für mein Problem findet man hier: PHP: PDO - Manual (http://de.php.net/pdo) .

Fuerchau
04-04-08, 11:41
Siehst du, Prepare und BindParam waren die benötigten Funktionen.