具有关系数据库名称的ZF2 PDO_IBM驱动程序

时间:2015-11-20 01:17:19

标签: database pdo zend-framework2

有一个Zend Framework 2.4连接工厂,需要与AS400 iSeries数据库建立连接。连接必须以这种方式进行,因为有多个测试环境,工厂需要容纳每个。

该方法使用Zend \ Db \ Adapter \ Adapter,我将该类传递给数据库连接参数数组。

问题:Zend \ Db \ Adapter不接受关系数据库(目录)名称。我假设由于驱动程序是PDO_IBM,因此需要一个字段来明确定义目录的名称。

以下是方法:

 public function conn($dbs) {
   $this->adapter = new Adapter(array(
       'driver' => $dbs['db']['driver'],
       'dbname' => $dbs['db']['dbname'],
       'username' => $dbs['db']['username'],
       'password' => $dbs['db']['password'],
       'hostname' => $dbs['db']['hostname'],
       'port' => $dbs['db']['port'],
   ));
   var_dump($this->adapter);
   return $this->adapter;
}

Adapter是\ Zend \ Db \ Adapter \ Adapter

的别名

这是创建的对象。

["driver":protected]=> object(Zend\Db\Adapter\Driver\Pdo\Pdo)#224 (4){ 
  ["connection":protected]=>object(Zend\Db\Adapter\Driver\Pdo\Connection)#225 (6) { 
["driver":protected]=> *RECURSION* 
["profiler":protected]=> NULL 
["driverName":protected]=> string(3)"ibm" 
["connectionParameters":protected]=> array(6) { 
    ["driver"]=> string(7) "PDO_IBM" 
    ["dbname"]=> string(7) “<relational_database_name>” 
    ["username"]=> string(3) “<user_name" 
    ["password"]=> string(3) “<password>" 
    ["hostname"]=> string(9) "127.0.0.1" 
    ["port"]=> string(3) "446" 
}

我可以使用:

实例化连接对象
 $conn = new \Zend\Db\Adapter\Adapter( );
 Pdo=ibm:<relational_database_name> 

但对于这种情况,这不是一个可行的解决方案。最后,这是错误:

  

连接错误:SQLSTATE = 42705,SQLConnect:-950关系数据库dbname =; hos不在关系数据库目录中。

1 个答案:

答案 0 :(得分:1)

为了完整起见,这里的配置适用于在Zend Server 6上运行并连接到AS400 iSeries数据库的ZF2 Zend \ Db \ Adapter \ Adapter。

 //concat the driver and rel. db directory name into one string
 //$dsn name is required for Zend\Db to correctly read it into memory 
 $dsn = "ibm:" . $db_dir_name;
   $this->adapter = new Adapter(array(
 'driver' => $driver,  // Pdo
 'dsn' => $dsn,
 'username' => <user_name>,
 'password' => <user_pwd>
 ));

这在任何地方都没有记录,并通过反复试验得出结论。