2012-03-16 24 views
1

Zend Frameworkで2つのデータベースに接続しようとしています。それはZend Frameworkを2つのmysqlデータベースと連携させることができません

#0 C:\xampp\php\zf\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#1 C:\xampp\php\zf\library\Zend\Db\Adapter\Abstract.php(479): Zend_Db_Statement->execute(Array) 
#2 C:\xampp\php\zf\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) 
#3 C:\xampp\php\zf\library\Zend\Db\Adapter\Abstract.php(736): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select), Array) 
#4 C:\xampp\htdocs\ne11133_multiDB\application\models\DbTable\CandyEligible.php(15): Zend_Db_Adapter_Abstract->fetchAll(Object(Zend_Db_Select)) 
#5 C:\xampp\htdocs\ne11133_multiDB\application\models\Index.php(179): Application_Model_DbTable_CandyEligible->test() 
#6 C:\xampp\htdocs\ne11133_multiDB\application\controllers\IndexController.php(22): Application_Model_Index->getTest() 
#7 C:\xampp\php\zf\library\Zend\Controller\Action.php(516): IndexController->indexAction() 
#8 C:\xampp\php\zf\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction') 
#9 C:\xampp\php\zf\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#10 C:\xampp\php\zf\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#11 C:\xampp\php\zf\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#12 C:\xampp\htdocs\ne11133_multiDB\public\index.php(26): Zend_Application->run() 
#13 {main} 

私に次のエラーがスローされ、これまでどのように私はstatement.phpにその機能を見ていたし、DBパラメータのいずれも渡されていないされていることが表示されます。残念ながら、私はそこに理由を把握することができず、これに対する解決策を探しているときは本当にあまりよくありませんので、私はここの誰かが私に手を差し伸べることを望んでいます。 DEVを使用しています

[production] 
phpSettings.display_startup_errors = 0 
phpSettings.display_errors = 0 
includePaths.library = APPLICATION_PATH "/../library" 
bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
appnamespace = "Application" 
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" 
resources.frontController.params.displayExceptions = 0 

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/" 
resources.layout.layout = "layout" 

resources.multidb.candy.adapter = PDO_MYSQL 
resources.multidb.candy.host = local 
resources.multidb.candy.username = name 
resources.multidb.candy.password = pass 
resources.multidb.candy.dbname = db 

resources.multidb.vt3.adapter = PDO_MYSQL 
resources.multidb.vt3.host = not_local 
resources.multidb.vt3.username = name 
resources.multidb.vt3.password = pass 
resources.multidb.vt3.dbname = db2 

[staging : production] 
resources.multidb.candy.adapter = PDO_MYSQL 
resources.multidb.candy.host = local 
resources.multidb.candy.username = name 
resources.multidb.candy.password = pass 
resources.multidb.candy.dbname = db 

resources.multidb.vt3.adapter = PDO_MYSQL 
resources.multidb.vt3.host = not_local 
resources.multidb.vt3.username = name 
resources.multidb.vt3.password = pass 
resources.multidb.vt3.dbname = db2 

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

resources.multidb.candy.adapter = PDO_MYSQL 
resources.multidb.candy.host = local 
resources.multidb.candy.username = name 
resources.multidb.candy.password = pass 
resources.multidb.candy.dbname = db 

resources.multidb.vt3.adapter = PDO_MYSQL 
resources.multidb.vt3.host = not_local 
resources.multidb.vt3.username = name 
resources.multidb.vt3.password = pass 
resources.multidb.vt3.dbname = db2 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 

resources.multidb.candy.adapter = PDO_MYSQL 
resources.multidb.candy.host = 192.168.1.34 
resources.multidb.candy.username = name 
resources.multidb.candy.password = pass 
resources.multidb.candy.dbname = db 
resources.multidb.candy.default = FALSE 

resources.multidb.vt3.adapter = PDO_MYSQL 
resources.multidb.vt3.host = 192.168.1.32 
resources.multidb.vt3.username = name 
resources.multidb.vt3.password = pass 
resources.multidb.vt3.dbname = db2 
resources.multidb.vt3.default = TRUE 

ブートストラップ

<?php 
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    public function __init() 
    { 
     $options = array(
      'layout'=>'layout', 
      'layoutPath'=>'/application/layouts', 
     ); 
     $layout = Zend_Layout::startMvc($options); 
    } 

    public function _initDbRegistry() 
    { 
     $this->bootstrap('multidb'); 
     $multidb = $this->getPluginResource('multidb'); 
     Zend_Registry::set('db_candy', $multidb->getDb('candy')); 
     Zend_Registry::set('db_vt3', $multidb->getDb('vt3')); 
    } 
} 

DBモデル - 以下は、この(名前はセキュリティ目的のために変更されている)

のapplication.iniに関連するコードがあります

<?php 
class Application_Model_DbTable_CandyEligible extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'table_name'; 
    protected $_adapter = 'db_candy'; 

    public function test() 
    { 
     $select = $this->_db->select(); 
     $select->from($this->_name); 
     try{ 
      $results = $this->_db->fetchAll($select); 
     }catch(Exception $exc){ 
      echo '<pre>'.$exc->getTraceAsString().'</pre>'; 
     } 
     return $result; 
    } 
} 
これは、それがデータベースに接続していると私は彼らに、コントローラ(およびインデックスモデル)を読み取ることができることを確認するだけで、少なくとも機能ですので

はちょうど私が$ _adapterがあるとは思わない

+0

実際に表示されるエラーメッセージは何ですか? –

+0

Zend_Db_Statement_Pdo - > _ execute(Array) – JoeyD473

+0

これはたぶん例外を投げている可能性があります。#0 C:¥xampp¥php¥zf¥library¥Zend¥Db¥Statement.php(300)それをキャッチしてメッセージをチェックできますか? –

答えて

0

結果から響いていますZend Tableクラスのプロパティ。キャンディデシベルを使用して、ブートストラップ

$multiDb = $this->getPluginResource('multidb'); 
Zend_Registry::set('multidb', $multiDb); 

、あなたのモデルのために:

protected function _setupDatabaseAdapter() 
{ 
    $db = Zend_Registry::get('db_candy'); 
    $this->_db = $db; 
    parent::_setupDatabaseAdapter(); 
} 
2

私はこの方法でそれを実行します。私はあなたが_setupDatabaseAdapter関数をオーバーライドして、テーブルのアダプタを設定することができると思い

このような親クラスを作成する

abstract class App_Db_CandyTable extends App_Db_Table 
{ 
    public function __construct($config = array(), $definition = null) 
    { 
     // use dns connection 
     $multiDbResource = Zend_Registry::get('multidb'); 
     $adapter = $multiDbResource->getDb('candy'); 
     parent::__construct($adapter); 
    } 
} 

これは私ですApp_Db_CandyTableからモデルクラスを継承し、自動的に適切な接続を選択します

関連する問題