3

コード

$options = array('autocommit' => DB2_AUTOCOMMIT_OFF);
$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL('?','?','?')");

$connection = db2_connect ( AS400_DATABASE, IS_USER_NAME, IS_USER_PASS, $options );
if (! $connection) {
     handleError("Unable to connect to the database.", 2);
}

$REF = "1234567891123456789122";
$PSSN = '123456789';
$SSSN = 123456789;

db2_bind_param($stmt, 1, 'REF',  DB2_PARAM_INOUT, DB2_CHAR, 22); //ERROR
db2_bind_param($stmt, 2, "PSSN", DB2_PARAM_INOUT, DB2_CHAR, 9); //ERROR
db2_bind_param($stmt, 3, "SSSN", DB2_PARAM_INOUT, DB2_CHAR, 9); //ERROR

db2_execute($stmt);

このリンクを見ると、答えは PTF バージョンを修正することでした。ただし、それは「複雑なクエリ」用です。これは非常に単純なプログラム呼び出しです。

このコードは、PHP 5.2.17 上にあるライブ iSeries で正常に動作します。

このコードは、現在 PHP 5.4.0 にある開発 iSeries では機能しません。db2_bind_param 行はすべて同じエラー メッセージをスローします。

5.2.x から 5.4 への大きな変更はありましたか? それとも、これはまったく無関係ですか?

単一引用符、二重引用符、引用符なしなど、変数宣言のさまざまな方法を試しましたが、PHP の型付けが緩い構文のため、どれも違いはありませんでした。

また、SQL 呼び出しの各パラメーターを囲む一重引用符を削除しようとしましたが、準備中にエラーが発生しました。

4

2 に答える 2

0

バインド マーカーを囲む一重引用符を削除します。

$stmt = db2_prepare($connection, "CALL LABLIB2.AR0011CL(?, ?, ?)");
于 2015-05-25T17:58:34.980 に答える