CodeIgniter ユーザガイド 日本語版 Version 1.6.3


データベースへの接続

データベースへの接続方法は2つあります:

自動接続

"自動接続" 機能は、ページが読み込まれるたびにデータベースクラスをロードし、インスタンス化するというものです。 "自動接続"を有効にするには、次のファイルの中にあるライブラリ配列の中に、database と指定してください [ 訳注: $autoload['libraries'] = array(’database’); などとします。 ]:

application/config/autoload.php

手動接続

ページの中で数ページだけがデータベース接続を必要とする場合は、手動でデータベースに接続することができます。手動でデータベースに接続するには、必要とするメソッド内で随時下記のコードを追加するか、そのクラスでグローバルに使用したい場合はコンストラクタに下記のコードを追加します。

$this->load->database();

上のメソッドの第1引数に何も指定しない場合は、設定ファイルで指定されているグループ [訳注:デフォルトのグループ] に接続します。多くの人にとっては、この方法が使いやすいと思います。

メソッドの第1引数は、オプションで設定ファイルに定義した特定のデータベース接続グループを指定するのに使用します。また、設定ファイルで指定されていない接続用のデータを渡すこともできます。例としては:

設定ファイルで定義したグループを選択するには次のようにします:

$this->load->database('group_name');

ここでの group_name が設定ファイルで定義した接続グループの名前になります。

手動で任意のデータベースに接続するには、次のように配列でデータを渡します:

$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = "";
$config['char_set'] = "utf8";
$config['dbcollat'] = "utf8_general_ci";

$this->load->database($config);

接続用の各データについての情報は、設定についてをご覧ください。

あるいは、データベースの接続データをデータソースネーム(DSN)を使って渡すこともできます。DSNは次のような形になっている必要があります:

$dsn = 'dbdriver://username:password@hostname/database';

$this->load->database($dsn);

データソースネーム(DSN)で設定ファイルのデフォルト値を上書きする場合には、接続データをクエリで追加します。

$dsn = 'dbdriver://username:password@hostname/database?char_set=utf8&dbcollat=utf8_general_ci&cache_on=true&cachedir=/path/to/cache';

$this->load->database($dsn);

複数のデータベースへの接続

同時に 2つ以上のデータベースに接続する必要がある場合は次のようにすることで可能になります:

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);

Note: "group_one" と "group_two" の部分は接続したいグループ名に変えてください(あるいは、上で説明したように接続用データを渡してください)。

メソッドの第2引数にTRUE (boolean) を指定すると、データベースオブジェクトを返すようになります。

このガイド一貫して使われている構文を使わずに、上記のような方法で接続すると、オブジェクト名を使ってコマンドを発行できます。つまり、以下のような方法でコマンドを発行するのではなく:

$this->db->query();
$this->db->result();
など...

かわりに次のような方法を利用できます:

$DB1->query();
$DB1->result();
など...