2

PHP API を使用して SQL ステートメントを作成し、それをデータベース (DB2) に接続するモジュールに渡します。

私の問題: Zend_Db_Statement_DB2 モジュールを介して SQL を渡すと、静的フィールド(sales_type) が null を返します。AS400 (コマンド ライン) で SQL を直接実行すると、正常に動作します。DB2 モジュールを介して同じ SQL を渡すと、「sales_type」フィールドはすべての行で null になります。

クエリの簡略化されたバージョン:

SELECT 'discount' "sales_type", sum(sales_type1) "sales" FROM salesTable
UNION
SELECT 'promotion' "sales_type", sum(sales_type2) "sales" FROM salesTable

架空の販売で期待される/望ましい結果 (コマンドラインでも返されるもの):

sales_type     sales
discount       12345
promotion       6789

SQL が DB2 モジュールを通過したときに返された結果:

sales_type     sales
null           12345
null            6789

選択クエリの実行に使用される PHP コードを以下に示します。

    public static function ExecuteSelect($sql)
{
    $adapter = new Zend_Db_Adapter_Db2(Zend_Registry::get('config')->resources->multidb->as400)

    //Prepare the SQL Statement
    $sqlStmt = new Zend_Db_Statement_DB2($adapter, $sql);

    $sqlStmt->execute();
    $rows = $sqlStmt->fetchAll();

    return $rows;
}

この問題の原因とそれを修正する方法について、誰かが私にもっと洞察を与えることができますか? また、後処理の php の回避策を探しているわけではありません。前もって感謝します!

4

1 に答える 1

1

解決策については、以下に投稿されたこのリンクを参照してください。ユーザーと照会を実行するジョブの両方で、CCSID を 37 に設定する必要があります。

PHP / SQL - EBCDIC を ASCII に変換する

于 2013-05-02T19:52:52.367 に答える