sfDatabaseManager クラスを使うことで Propel より低いレイヤーでデータベースの情報を得たり、(Creaole による)データベース接続を行うことができます。
この方法を使うと databases.yml の設定を一時的に変更した上でデータベースアクセスができるようになります。
$manager = new sfDatabaseManager();
$manager->initialize(); // インスタンスに database.yml ファイルを読み込んで初期化する。
$db = $manager->getDatabase(“propel”); // “propel:” 以下を参照し、sfDatabase のインスタンスを得る。 引数を省略すると default: を参照する
// database.yml の設定を参照する例:
echo $db->getParameter(“phptype”).”\n”; // propel: param: phptype: を参照(“mysql” など)
echo $db->getParameter(“host”).”\n”; // propel: param: host: を参照(localhost など)
echo $db->getParameter(“database”).”\n”; // propel: param: database: を参照
echo $db->getParameter(“username”).”\n”; // propel: param: username: を参照
// databases.yml の設定を一時的に上書きする例:
$db->setParameter(“database”, null); // 特定のデータベースに接続しない。
// (データベースが存在しなくてもエラーにならないため
// CREATE DATABASE したい場合やテーブルを一切利用
// しない場合などに有用)
// データベース接続の例:
// databases.yml の設定をもとに Creole のデータベース接続インスタンスを得る
// (vendor/creole/Connelction.php で定義される Connection 抽象クラスのインスタンス)
$con = $db->getConnection();
$rs = $con->executeQuery(“SELECT CURRENT_TIMESTAMP AS time”); // クエリを発行。
while($rs->next()){ // ポインタを進める(複数レコード対応)
$row = $rs->getRow(); // レコードを連想配列で取得
echo $row[“time”];
}
参考:
– Class sfDatabaseManager(symfony API)
sfDatabaseManager のクラス定義。
– Class sfDatabase(symfony API)
sfDatabaseManager::getDatabase() で得られるインスタンスの定義。
– SymfonyAPI – Connection Interface Reference(cpr.in-berlin.de による symfony の phpdoc)
sfDatabase::getConnection() で得られるインスタンスの定義。
– SymfonyAPI – ResultSet Interface Reference(同上)
Connection::executeQuery() で得られるインスタンスの定義。