Project DARTS

フリーフォント(日本語・英字)や、フリーソフトを配布中!無料で利用できます。

multiDB Zend_Framework

zend_framework を、さわり初めて3ヶ月くらい・・・。
必要に迫られて、マルチデータベース(multidb)を使うことになったのだが・・・エラーで先に進めない・・・。

“exception ‘PDOException’ with message ‘SQLSTATE[08006] [7] invalid connection option “adapter”‘ in C:\zend\library\Zend\Db\Adapter\Pdo\Abstract.php:130
Stack trace: (以下略…

application.iniには、以下のように設定した。

;データベース1
resources.multidb.db1.adapter = "pdo_pgsql"
resources.multidb.db1.host = "localhost"
resources.multidb.db1.username = "user"
resources.multidb.db1.password = "hogehoge"
resources.multidb.db1.dbname = "database1"
resources.multidb.db1.default = true

;データベース2
resources.multidb.db2.adapter = "pdo_pgsql"
resources.multidb.db2.host = "localhost"
resources.multidb.db2.username = "dbuser"
resources.multidb.db2.password = "hogehoge"
resources.multidb.db2.dbname = "database2"

なぜだ!なぜ動かない!

ということで、Zend Frameworkの中身を見てみることに・・・・。
…/library/Zend/Application/Resource/Multidb.php
の中の 76行目位から・・・

public function init()
{
$options = $this->getOptions();

foreach ($options as $id => $params) {
$this->_dbs[$id] = Zend_Db::factory($params['adapter'], $params);

if ((isset($params['default']) && $params['default'] == true)
// For consistency with the Db Resource Plugin
|| (isset($params['isDefaultTableAdapter'])
&& $params['isDefaultTableAdapter'] == true)
) {
$this->_setDefault($this->_dbs[$id]);
}
}

return $this;
}

ん!?

$this->_dbs[$id] = Zend_Db::factory($params['adapter'], $params);
これ変だ・・・。パラメーター内にadapterを入れておくとエラーになるじゃんか!

・・・・・。汗。

これが解るまでに半日使いましたよ・・・・。

そして、 「2010/04/13現在の最新版」Ver 1.10.3では、修正されてました。

ということで、同じようなお悩みをお持ちだった、そこの貴方!
最新版を使うように心がけましょう。

コメントは受け付けていません。