2010-11-24 7 views
0

すべて、Zend_Dbへのラッパーが失敗しています

私はアプリケーション全体にdb接続を提供するためにZend_Dbクラスを拡張する以下のラッパーを作成しました。 db接続は正常に動作しますが、別のクラスから呼び出されたときにはクエリを実行できません。 Testapp_DBを含んでPHPファイルにクエリを実行しようとすると

class Testapp_DB extends Zend_Db { 

     //Declare member variables. 
     public $db   = null; 
     public $db_host  = ""; 
     public $db_database = ""; 
     public $db_username = ""; 
     public $db_password = ""; 


public function __construct() 
     { 

      //Read Database Info from Config File 
      $this->db_host  = Testapp_Registry::get('config')->db->mysql->host; 
      $this->db_database = Testapp_Registry::get('config')->db->mysql->dbname; 
      $this->db_username = Testapp_Registry::get('config')->db->mysql->username; 
      $this->db_password = Testapp_Registry::get('config')->db->mysql->password; 

      $db = Zend_Db::factory('Mysqli', array(
       'host'  => $this->db_host, 
       'username' => $this->db_username, 
       'password' => $this->db_password, 
       'dbname' => $this->db_database 
      )); 

      $db->getConnection(); //Works fine 
      $this->db = $db; 
} 
} 

- 失敗した...

<?php 

$db = new Testapp_DB(); 
print_r($db); //I can see the DB object here 
$sql = 'SELECT * FROM tb_Log'; 
$result = $db->fetchAll($sql, 2); //This method fails.. Don't know why. Any ideas? 
print_r($result); 
?> 

のはfetchAllメソッドが失敗した理由を誰かが、説明していただけますか?

答えて

1

* Zend_Dbの* doesntの

おかげで工場()以外の方法があります。

私は本当に限り私はあなたが(クエリを呼び出す必要が見ることができるようにあなたがこの方法を解決しようとしているものを、得るが、いけない)このよう

$db->db->query(); 
+0

ありがとうございました。これはうまく動作します。$ db-> db-> query()の代わりに$ db-> query()にアクセスできるように、Testapp_DBクラスをどのように変更できますか?シングルトンパターンを追加できますか? – Jake

+0

Nevermind ..シングルトンパターンを作成して – Jake

0

おそらく、代わりにあなたのラッパーを使用しての、この方法を試してください。

// Note: change your config to have a 'params' entry 
$db = Zend_Db::factory(Testapp_Registry::get('config')->db->mysql); 
Zend_Db_Table_Abstract::setDefaultAdapter($db); 
Zend_Registry::set('database', $db); 

// in your config 
...mysql.params.host = ... 
...mysql.params.dbname = ... 
...mysql.params.username = ... 
...mysql.params.password = ... 

次に、あなたのZend_Db_Tableオブジェクトは、接続性を持つことになり、それに加えて、あなたはZend_Registry::get('database')を使用して接続をつかむことができます。また、リクエストごとに1回のみデータベース接続を作成します。

$bootstrap = $application->getBootstrap(); 
$bootstrap->bootstrap(‘db’); 
$config = $bootstrap->getResource(‘db’)->getConfig(); 
$runCommand = “mysql -h “.$config["host"].” -P “.$config["port"].” -u’”.$config["username"].”‘ -p’”.$config["password"].”‘ “.$config["dbname"].” < “.dirname(__FILE__) . ‘/schema.mysql.sql’; 
echo $runCommand; 
system($runCommand); 

・ホープ、このことができます:

関連する問題