有一个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;
}
适配器是\ 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 =;不在关系数据库目录中。
为了完整起见,以下配置适用于在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>
));
这没有记录在任何地方,并通过反复试验弄清楚了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句