ラベル Zend_Db の投稿を表示しています。 すべての投稿を表示
ラベル Zend_Db の投稿を表示しています。 すべての投稿を表示

2013年1月5日土曜日

Zend_DbでのDB接続管理

PDOドライバを使う場合、

   PDO::ATTR_PERSISTENT=>true

を設定することで、DBコネクションがキャッシュされて、再利用ができる

http://php.net/manual/ja/pdo.connections.php




Zend_Dbを使う場合には、username,passwordと同じレベルで、persistentにtrueを指定することで、同様に設定になる。

Zend Frameworkでconifig.iniに以下のように指定すると、利用できるようになる


----ここから----
resources.db.params.username=DB接続ユーザ名
resources.db.params.password=DB接続パスワード
resources.db.params.persistent=true
----ここまで----


http://framework.zend.com/manual/1.12/ja/zend.db.adapter.html

に書いてあったけど、ページの最後のほうにnoteで書いてあったから見過ごしてた。


MySQLでコネクション数をみるとpersistent=trueとすることで、いくつかのコネクションが張られっぱなしになることを確認。
ただ、PDO側でコネクション数上限を指定するところが見当たらないので、DB側のMAX分だけコネクションが張られっぱなしになる可能性もあるかも。
だれか教えてほしい。

2010年1月24日日曜日

Zend_Db_Table(その2) 接続準備編

Zend_Db_Tableに接続先となるDBの情報を指定する必要がある。
※指定するのはZend_Db_Adapterクラス、でZend_Db::Factory()で生成すればいい。


Zend_Db_Tableの継承クラスに指定する方法はいくつかあるので、必要に応じて使い分ける。

a)Zend_Db_Tableのコンストラクタで接続先情報を指定する
b)Zend_Db_Table::_setupDatabaseAdapter()をオーバーライドして、接続先情報を設定する。
c)Zend_Db_Table_Abstract::setDefaultAdapter($db)ですべてZend_Db_Table継承クラスに対して、接続先を指定する。
※a),b)の指定が優先される。
b)は接続先が他のテーブルと異なる、かつ、接続先の設定変更しないような場合に使う。

通常のアプリケーションでは、テーブルがひとつということはほとんどないので、c)の方法でBootstrapで記述しておけばいい。
------コード例-------
$db=Zend_Db::factory('Pdo_Pgsql', array(
 host=>'localhost',//接続先ホスト
 username=>'dbuser',//DBユーザ名
 password=>'dbpass',//DBパスワード
 dbname=>'DB NAME'//DB名
));
Zend_Db_Table_Abstract::setDefaultAdapter($db)
------ここまで-------

Zend_Db::factory()メソッドで指定する場合、配列で直接指定するほかにZend_Configを利用して外部iniファイルに設定を記述することもできる。

Zend_Applicationを利用する場合は、リソースプラグイン(Zend_Application_Resource_Db)を利用できるので、以下のように記述しておけば、勝手にデフォルトアダプターとして設定してくれるので便利

-------application.iniでの記述例---------
resources.db.adapter = pdo_pgsql
resources.db.params.host = localhost
resources.db.params.username = dbuser
resources.db.params.password = dbpassword
resources.db.params.dbname = dbname
resources.db.isDefaultTableAdapter = true
-------ここまで----------

2010年1月19日火曜日

FirePHPは便利

FirePHPは、FirefoxのアドオンのFirebugの機能拡張で、インストールすることで、サーバ側の出力をFirebugのコンソールに出力できる。

HTTPヘッダーを利用しているようで、試してませんが、Ajaxの通信などでHTMLをブラウザに出力しない場合でも利用できるそうです。
Zend Frameworkのコンポーネントでは、Zend_logやZend_Db_Profilerなどで、出力先をFireBugのコンソールにできます。

(1)ログを内容を出力する
ログライターにZend_Log_Writer_Firebugを利用する。

$writer=new Zend_Log_Writer_Firebug();
$log=new Zend_Log($writer);
//日本語出力もOK
$log->info("日本語もOK");

日本語の出力も問題なくできました(UTF-8だけしか試してません)

(2)DBのプロファイルを出力する
プロファイラーに Zend_Db_Profiler_Firebugを設定する。

$db=Zend_Db::factory('Pdo_Pgsql', array(
 host=>'hogehoge',
 username=>'dbuser',
 password=>'dbpass',
 dbname=>'sampledb'
));
$profiler=new Zend_Db_Profiler_Firebug('All DB Queries');
$profiler->setEnabled(true);
$db->setProfiler($profiler);
Zend_Db_Table_Abstract::setDefaultAdapter($db);


Firebugのコンソールではテーブル構成で結構見やすい。

自分の環境では、なぜか、ページを出力しただけではコンソールに出力されず、その状態で一度Firebugをオフ/オンして再表示するとコンソールに表示される。
まだ安定してないのか、設定がよくないのか・・・・。
(追記)Firebugを1.50に更新したら直った。