0
$my_var = "1";

$connection = db2_connect ( "*LOCAL", "ISCSC", "ISCSC" );

$strSql = 'CALL LMTLIB.ARTEST(?)';

$stmt = db2_prepare ( $connection, $strSql );

db2_bind_param($stmt, 1, "my_var", DB2_PARAM_INOUT, DB2_CHAR);

$rc = db2_execute ( $stmt );

echo $my_var;

このコードブロックが実行されると、$ my_varの値は¦–¦</p>になります。

呼び出されているテストRPGLEプログラムが戻ってきました

プログラムが変更されると、返される文字が異なります...したがって、プログラムから値が返されることがわかります。唯一の問題は、これらの文字をEBCDICからASCIIに変換する方法です。


編集

私は以下を使用してみました:

mb_convert_encoding($my_var, "ASCII", "cp037");
mb_convert_encoding($my_var, "ASCII", "EBCDIC");
iconv("cp037", "ASCII", $my_var);
iconv("EBCDIC", "ASCII", $my_var);

しかし、このエラーが発生します:「間違った文字セット、「ebcdic」から「ascii」への変換は許可されていません」

そして、「間違った文字セット、「cp037」から「ascii」への変換は許可されていません」

4

4 に答える 4

2

これは、いくつかのシステム (IBM i v7r1、PHP バージョン 5.4.16) で機能しています。

$ascii_value = iconv("IBM-1047","ISO8859-1", $ebcdic_value); // EBCDIC->ASCII 変換

于 2014-02-14T17:29:44.890 に答える
1

次の PHP 関数を使用します。

$recoded = recode_string ('EBCDIC..ASCII', $my_var);
于 2012-05-08T13:42:33.267 に答える
1

CREATE PROCEDURE ステートメントで、言語に一致する CCSID を使用します。米国英語の場合、それは 37 になります。例:

CREATE PROCEDURE buck.phptest(         
 inout parm_inout varchar (5) ccsid 37)
LANGUAGE RPGLE                         
NOT DETERMINISTIC                      
CALLED ON NULL INPUT                   
EXTERNAL NAME buck.phptest             
PARAMETER STYLE GENERAL                
于 2012-05-08T15:46:23.527 に答える