データベースアクセス

concrete5はデータをMySQLデータベースに保存します。concrete5を拡張しようと考える開発者は、どのようにデータを取得し変更するか理解している必要があります。このページでは、データベースに接続し、クエリを渡し、抽象化レイヤーを使用する方法について解説します。

デフォルトの接続情報はどこに保存されていますか?

concrete5をインストールすると、データベース接続情報を含むファイルがインストール中に下記の位置に作成されます。

サイトのルート/config/site.php

サーバー、データベース名、データベースユーザー名、パスワードが定数として保存されています。これらはconcrete5がデータベースに接続する際のデフォルト設定として使用されます。

データベースに接続

データベースオブジェクト

関数やClassから次のコマンドでアクティブなデータベースオブジェクトを呼び出すことができます。

$db= Loader::db();

現在のスコープで利用可能なデータベースオブジェクトを作成し、これを使ってデータの取得、変更ができます。

他のデータベースに接続する

他のデータベースに接続する必要があるばあいは、アクティブなデータベースオブジェクトを都度切り替えることができます。

$db = Loader::db( 'newserver', 'newuser', 'newpassword', 'newdatabase', true);

他のデータベースでの作業が終了したら、concrete5のデフォルトデータベースに接続し直す必要があります。

$db = Loader::db(null, null, null, null, true);

これはデフォルトのデータベースオブジェクトを再読み込みします。

データベースクエリ

基本的なデータベースクエリ

データベースオブジェクトを読み込んだら、Executeメソッドにクエリを引数として渡すことでデータを取得できます。一例:

$db->Execute('select * from TestTable');

TestTableテーブルから全てのデータを取得します。

ADODBを使ってクエリを簡略化する

concrete5はADODBデータベース抽象化レイヤーを使用しています。これをつかって、短いシンタックスでクエリを構築することができます。これはconcrete5でデータを取得・編集する際に推奨される方法です。完全な、長いクエリを書いても動きますが、ADODBを活用することが推奨されます。

いくつかの引数からの値をデータベースに保存したい場合を考えてみましょう。

$db->Execute("update TestTable set TestColumn=? where key=?",array($colval, $key));

このコードはTestTableテーブルの、$keyに合致するTestColumnカラムを$colvalに変更します。

以下はADODBによって可能になるショートカットの一例です。

$db->GetOne("select col from table where key='John'"); #最初のフィールドを取得
$db->GetRow("select col from table where key='John'"); #最初の行を取得
$db->GetAll("select col from table"); #配列で全ての行を取得
$db->GetAssoc("select key,col from table"); # 連想配列 array $key=>col で取得

データベースデバッグ

デバッグモード

コードのトラブルシューティングを行なっていて、ページを表示する際に行なわれている全てを確認したい場合は、デバッグモードが便利です。これは全てのデータベースクエリをページ内にインラインで表示します。次の行をビューレイヤー(ページタイプ、ブロックのview.phpなど)に追加します。

Database::setDebug(true);

デバッグモードをfalseに戻すことでいつでもデバッグモードを終了することができます。

Database::setDebug(false);

ヒント:あるべき場所に記述してください

データベースへの接続はコントローラーファイルに置くべきです。これはブロック、シングルページ、テーマのいずれに置いても言えます。プレゼンテーションレイヤー(ビュー)をあらゆるデータベース接続から切り離すようにしてください。

原文:Database Access