2015-11-20 40 views
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. 

謝謝!

回答

0

爲了完整起見,以下是適用於在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> 
)); 

這是沒有記錄在任何地方,並通過試驗和錯誤計算出來。

+0

這是在我的實例$ dsn =「ibm:* LOCAL」;中工作的dsn字符串。另外在http://php.net/manual/en/ref.pdo-ibm.connection.php上的php.net上更好的文檔PDO_IBM。 – rwhite35

相關問題