有一个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不在关系数据库目录中。
答案 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>
));
这在任何地方都没有记录,并通过反复试验得出结论。