db2_prepare & db2_executeの怪
PHPでDB2のテーブルにSQLを投げる際に、代表的な関数が2つあります。
- もう1つは
「db2_exec」は1回のアクションで、結果を取るのに対して、「db2_prepra」はSQLを事前コンパイルし、DB2用に最適化後に、「db2_execute」でSQLを実際に投げるという最低2アクションがあります。(パラーメタArrayの代わりに、db2_bind_parmを使うことも出来ます。)
どちらかを使用用途に合った形で使えば良いのですが、「db2_prepra」方だけ、不思議な現象が起きるのです。
IBM i(AS/400)のDB2には文字列のデータ属性が幾つかあります。以下が代表的なモノです。
- A:SBCSのみ
- O:SBCS,DBCS混合
- J:DBCSのみ(先頭桁にx'0E'と最終桁にx'0F'が強制的に挿入される)
- G:DBCSのみ(x'0E'とx'0F'を扱わないDBCSフィールド)
この内”G”は、殆使う機会もないので、試してないのですが、”J”に関して言うと、「db2_prepra」だと、正しいSQLの結果が得られないのです。「db2_exec」だと問題なく結果が得られるのに...。:-(
そういう仕様なのか?不具合なのか?は、不明ですが、”J”フィールドを使われている方は、困るかもしれませんね。
自分は、強制的に入る、シフトイン・シフトアウトがどうも好きになれないので、あまり使う機会がないのですが。