0
有一個需要與AS400 iSeries數據庫建立連接的Zend Framework 2.4連接工廠。連接必須以這種方式進行,因爲有多個測試環境,工廠需要適應每個測試環境。帶關係數據庫名稱的ZF2 PDO_IBM驅動程序
該方法使用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 \適配器\適配器的別名
這裏是被創建的對象。
["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=<rdn>;hos not in relational database directory.
謝謝!
這是在我的實例$ dsn =「ibm:* LOCAL」;中工作的dsn字符串。另外在http://php.net/manual/en/ref.pdo-ibm.connection.php上的php.net上更好的文檔PDO_IBM。 – rwhite35