CodeIgniter 2.xのDatabaseクラスを外部から利用する post

CodeIgniterのDatabaseクラスを外部から使う方法を考えてみました。CodeIgniter 2.1.4で確認しています。

CodeIgniter/dbtest.php:

<?php

// CodeIgniterの定数
define('APPPATH', __DIR__.'/application/');
define('BASEPATH', __DIR__.'/system/');

// 実行に必要なファイルや関数などを準備
require BASEPATH.'database/DB.php';
require BASEPATH.'core/Common.php';
require BASEPATH.'core/Controller.php';
function &get_instance()
{
    return CI_Controller::get_instance();
}
new CI_Controller();

// ここからがDatabaseクラスを使うコード
$db = DB();
$query = $db->query('SELECT * FROM example');

foreach ($query->result() as $row)
{
   echo $row->id . ' ';
   echo $row->language . "\n";
}

ここでは、ファイルをCodeIgniterフォルダに置いてますが、定数のパスを調整すればどこにでも配置できます。また、データベース設定はCodeIgniterのデータベース設定ファイルに記載していますが、DB()関数にDSNで渡すことも可能です。

コマンドラインから実行してみます。

$ php dbtest.php 
1 PHP
2 Java
3 Ruby
4 Python
5 Perl

はい、動作しました。

意外に簡単に動きましたが、名前空間を使っていないCodeIgniterなので、グローバル空間にCodeIgniterの定数や関数、クラスが配置されるのはいたしかたないですね。

もし、それが問題になるとしたら、CodeIgniterのコードに手を入れて名前空間を加えるか、作成するアプリの方の名前を衝突しないように変更するしかないでしょうね。

まあ、作成するアプリに名前空間を付けて、関数は使用しないというコーディングをしていれば、まあ問題になることはないと思いますが。

Date: 2014/01/31

Tags: database, codeigniter