コード
$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 呼び出しの各パラメーターを囲む一重引用符を削除しようとしましたが、準備中にエラーが発生しました。