ストアドは適宜作成しておいてください。
以下のコードは PIYOPIYO
プロシージャを実行する例です。PIYOPIYO
プロシージャは2つのパラメータを使用し、1つ目が入力パラメータ (CHAR 4桁)、2つ目が出力パラメータ (CHAR 2桁) とします。
また、PIYOPIYO
プロシージャで呼び出されるプログラムはライブラリ LIB1
LIB2
を使用します。なので、ここでは接続文字列に DefaultLibraries
キーワードを入れてみました。不要ならキーワードごと外してください。
IBM i AccessのODBC接続文字列は、以下に公式の解説があります。
ODBC データ・ソースの手動による構成
接続ストリング・キーワード
以下がサンプルのPHPコードです。
サンプル中で ※備考あり としたところについて。
bindParam
の第4引数はパラメータ長で、出力パラメータの時は明示的に指定する必要があります。
このサンプルの PIYOPIYO
プロシージャの出力パラメータは2桁なのですが、当方環境ではなぜかいつも、出力パラメータを1桁余分に取っておかないとPHPが Out of memory
エラーを吐きました。なので3桁にしてます。
出力パラメータの文字コードについて
私の調査不足かもしれませんが、どうもWindows機にインストールしたドライバから IBM i にODBCで接続する場合、出力パラメータの文字コードは必ず CP932 (SJIS-win) になってしまうようです。それどころか PDO
が吐くメッセージすら CP932 固定です。これを接続設定とかで何とかする方法がどうしても見つけられませんでした。
なのでPHPの内部エンコーディングが UTF-8 (というか SJIS-win 以外) の場合、受け取った後で適宜変換する必要があります。それを踏まえて、上述のサンプルを修正したものが以下です。