*

codeigniterで複数データベース切替方法について

公開日: : CodeIgniter, PHP

PAK12_10naname500

codeigniterでデータベース切替を行うためにはどうしたらよいかを試行錯誤してみました。こんな方法でいいんだとわかったことを記述します。

データベースの記述箇所は、application/config/database.php だと分かります。記述例は以下のようになります。

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

複数の場合は、以下のようにもうひとつの設定を書き込み、$this->load->database(‘db2’); を読み込むことで2つ目のDBに切り替えることが可能です。

$db['db2']['hostname'] = "localhost";
$db['db2']['username'] = "root";
$db['db2']['password'] = "";
$db['db2']['database'] = "database_name2";
$db['db2']['dbdriver'] = "mysql";
$db['db2']['dbprefix'] = "";
$db['db2']['pconnect'] = TRUE;
$db['db2']['db_debug'] = FALSE;
$db['db2']['cache_on'] = FALSE;
$db['db2']['cachedir'] = "";
$db['db2']['char_set'] = "utf8";
$db['db2']['dbcollat'] = "utf8_general_ci";
$db['db2']['swap_pre'] = "";
$db['db2']['autoinit'] = TRUE;
$db['db2']['stricton'] = FALSE;

ただ、それだと設定ファイルを記述する手間があり少し面倒です。
そこでフレームワーク内のクラスCI_DB_driverに以下の記述があり$this->db_select()の箇所で選択されたデータベースに接続していることが分かります。

function initialize()
{
	// If an existing connection resource is available
	// there is no need to connect and select the database
	if (is_resource($this->conn_id) OR is_object($this->conn_id))
	{
		return TRUE;
	}
	// ----------------------------------------------------------------

	// Connect to the database and set the connection ID
	$this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();

	// No connection resource?  Throw an error
	if ( ! $this->conn_id)
	{
		log_message('error', 'Unable to connect to the database');
		if ($this->db_debug)
		{
			$this->display_error('db_unable_to_connect');
		}
		return FALSE;
	}

	// ----------------------------------------------------------------

	// Select the DB... assuming a database name is specified in the config file
	if ($this->database != '')
	{
		if ( ! $this->db_select())
		{
			log_message('error', 'Unable to select database: '.$this->database);
			if ($this->db_debug)
			{
				$this->display_error('db_unable_to_select', $this->database);
			}
			return FALSE;
		}
		else
		{
			// We've selected the DB. Now we set the character set
			if ( ! $this->db_set_charset($this->char_set, $this->dbcollat))
			{
				return FALSE;
			}
			return TRUE;
		}
	}
	return TRUE;
}

上記のソースコードを参考にヘルパーにdatabase_helper.phpを作成して以下の様な切替関数を作ることでデータベース名を指定することで切り替えができました。

if ( ! function_exists('switch_company_database'))
{
	function switch_company_database($company_name) {
		$CI =& get_instance();
		$CI->db->database = $company_name;
		$CI->db->db_select();
	}
}

お問い合わせはこちら!

関連記事

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト:120分 config

記事を読む

【Codeigniter】$this->db->where() の第3引数にfalseを指定した時の解説

photo credit: trekkyandy via photopin cc PHPに

記事を読む

自動改札機のようにfuelphpでormのModelを自動作成する方法

  自動改札機をみたときに、fuelphpのORMのモデルを自動化させたい!

記事を読む

PHP初心者の私がCodeIgniterを勉強して感じた4つのメリット、2つのデメリット

photo credit: Tc Morgan via photopin cc PHPを本

記事を読む

codeigniterのヘッダー、フッターはhookでなくloadで対応する

photo credit: mrlerone via photopin cc  

記事を読む

第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。 本当は発表を聞きに行く

記事を読む

codeigniterでselect文にunionを使いたい

select文でunionを使いたいが、調べてみてると普通にできなさそうなので、librar

記事を読む

phpでexif_read_dataを使ってexif情報から撮影日を取得する

写真には画像データ以外に撮影日が取得できます!それがexifデータで、phpではexif_r

記事を読む

codeigniterはセッション情報をクッキー保持するので、複数台構成でもセッション保持してくれる

サービスが拡大していくと、いずれサーバの複数台構成にしなければならなくなる状況になります。

記事を読む

PHP初心者は特に必見!CodeIgniter勉強するなら参考になるサイトまとめ

今でもメインで使っているし、使っていて気持ちのよいPHPフレームワークはCodeIgnite

記事を読む

お問い合わせはこちら!

Comment

  1. […] codeigniterで複数データベース切替方法について […]

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

お問い合わせはこちら!

Laravel 5.1でLaravel Mixを使ってみた

本投稿の目的は、Laravel 5.1でLaravel Mixを利用し

Laravel 5.1の自動ログインのお試し!

セッションの保持時間を1分にする 単位:分 デフォルト

SourceTreeで差分ファイルを抽出

GitのクライアントでSourceTreeを利用する時、コミットの差分

第104回 PHP勉強会に参加しました!

昨日「第104回 PHP勉強会@東京」に参加し、メイン発表をしました。

Windows10にLaravel開発環境を構築

本記事は筆者のノートパソコンにLaravelプロジェクトの開発環境を構

→もっと見る

  • AWS構築 - クラウドアドバイザー
PAGE TOP ↑