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分だけコネクションが張られっぱなしになる可能性もあるかも。
だれか教えてほしい。
2013年1月5日土曜日
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
-------ここまで----------
※指定するのは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を利用する。
日本語の出力も問題なくできました(UTF-8だけしか試してません)
(2)DBのプロファイルを出力する
プロファイラーに Zend_Db_Profiler_Firebugを設定する。
Firebugのコンソールではテーブル構成で結構見やすい。
自分の環境では、なぜか、ページを出力しただけではコンソールに出力されず、その状態で一度Firebugをオフ/オンして再表示するとコンソールに表示される。
まだ安定してないのか、設定がよくないのか・・・・。
(追記)Firebugを1.50に更新したら直った。
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に更新したら直った。
登録:
投稿 (Atom)