DB2 i系列上的ZF2 Zend \ Paginator \ Adapter \ DbSelect

时间:2014-12-10 22:06:29

标签: php zend-framework2 db2 ibm-midrange apigility

我正在创建Zend APIgility应用程序REST服务,并且我的fetchAll Mapper函数出现问题。

我通过Windows应用服务器上的DB2 Connect连接到在i系列服务器(AS / 400)上运行的IBM DB2数据库。

My Connection是在我的local.php中完成的:

return array(
    'db' => array(
        'driver' => 'IbmDb2',
        'database' => $database,
        'username' => $user,
        'password' => $password,
        'hostname' => $host,
        'port' => $port,
        'driver_options' => array(
            'i5_naming' => DB2_I5_NAMING_ON,
            'i5_lib' => 'LIBWEB',
        ),
    ), 
);

我的Mapper类中的fetchAll()函数是:

public function fetchAll()
{
    $select = new Select('WBRESOURCE');
    $paginatorAdapter = new DbSelect($select, $this->adapter);
    $collection = new ResourcesCollection($paginatorAdapter);
    return $collection;
}

当我点击DbSelect时,ZF2抛出以下DB2 Connect错误:

"[IBM][CLI Driver][AS] SQL0204N \"*LIBL.WBRESOURCE\" is an undefined name. SQLSTATE=42704"

我不知道为什么它使用* LIBL(用户定义的库列表),因为我在我的连接选项中定义了库(SCHEMA)用作LIBWEB。

提前致谢!

罗布

1 个答案:

答案 0 :(得分:1)

尝试更改此部分:

'driver_options' => array(
    'i5_naming' => DB2_I5_NAMING_ON,
    'i5_lib' => 'LIBWEB',

更改为":

'driver_options' => array(
    'i5_naming' => DB2_I5_NAMING_OFF,    <=== change
    'i5_lib' => 'LIBWEB',

通过使用DB2_I5_NAMING_OFF,您应该获得SQL命名模式。使用DB2 i5命名模式会导致依赖于作业的库列表。

有关参数的一些信息,请参阅PHP: db2-connect