2014-12-10 65 views
3

我创建了一个Zend APIgility应用程序REST服务,并且遇到了我的fetchAll Mapper函数的一个问题。Z2 Zend Paginator Adapter DbSelect on DB2 i系列

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

我的连接是在我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', 
     ), 
    ), 
); 

在我的映射类中的使用fetchall()函数是:

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

当我打的DbSelect,ZF2抛出以下DB2连接错误:

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

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

在此先感谢!

罗布

+0

从我所有的研究和排列中,我能够让DbSelect工作的唯一方法是保持i5_naming为ON并移除i5_lib。然后我确定我想访问的表格在连接用户的库列表中($ user)。所以实质上,无论i5_naming选项的状态如何(On或Off),DbSelect都会完全忽略i5_lib。 – user1551869 2014-12-11 15:48:44

回答

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有关参数的一些信息。

+0

我确实给了一个旋风,没有运气。当我将i5_naming更改为OFF时,ZF2 DbSelect试图在$ user.WBRESOURCE中完全忽略i5_lib。 – user1551869 2014-12-11 15:45:50

+0

我刚才意识到你原来的名字显示为'“* LIBL.WBRESOURCE”'。不应该有一个“。”在设置DB2_I5_NAMING_ON时名称中间包含分隔符。分隔符应该是“/”。这让我想知道是否应该联系Zend支持来查看是否存在已知的错误修复。 – user2338816 2014-12-12 01:08:31