ZF2 PDO_IBM 具有关系数据库名称的驱动程序
ZF2 PDO_IBM Driver with Relational Database Name
有一个需要与 AS400 iSeries 数据库建立连接的 Zend Framework 2.4 连接工厂。必须以这种方式进行连接,因为有多个测试环境,工厂需要适应每个环境。
该方法使用 Zend\Db\Adapter\Adapter,我向 class 传递了一个数据库连接参数数组。
问题: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;
}
适配器是\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>
但这不是针对这种情况的可行解决方案。最后,这里是错误:
Connect Error: SQLSTATE=42705, SQLConnect: -950 Relational database dbname=;hos not in relational database directory.
为了完整起见,这里是适用于 Zend Server 6 上的 ZF2 Zend\Db\Adapter\Adapter 运行 并连接到 AS400 iSeries 数据库的配置。
//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>
));
这在任何地方都没有记录,而是通过反复试验得出的。
有一个需要与 AS400 iSeries 数据库建立连接的 Zend Framework 2.4 连接工厂。必须以这种方式进行连接,因为有多个测试环境,工厂需要适应每个环境。
该方法使用 Zend\Db\Adapter\Adapter,我向 class 传递了一个数据库连接参数数组。
问题: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;
}
适配器是\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>
但这不是针对这种情况的可行解决方案。最后,这里是错误:
Connect Error: SQLSTATE=42705, SQLConnect: -950 Relational database dbname=;hos not in relational database directory.
为了完整起见,这里是适用于 Zend Server 6 上的 ZF2 Zend\Db\Adapter\Adapter 运行 并连接到 AS400 iSeries 数据库的配置。
//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>
));
这在任何地方都没有记录,而是通过反复试验得出的。