CodeIgniter1.7.2でSQLite3のカラム名を取得できるようにする
CodeIgniterのSQLite3に対する迫害と、引き続き奮闘しています。
CIでSQLite3を使えるようにする方法は 先日 紹介しました。
CIにはテーブルのカラム名を取得する「$this->db->list_fields()」というメソッドがありますが、上の方法で導入したPDOドライバでは使えません。どうやら list_fields() メソッドから呼び出されるローカル関数が定義されていないようです。
ちょっと改造すれば使えるようになったので、やり方を共有します。
手順
- /system/database/drivers/pdo/pdo_driver.php 内に、下記メソッドを追加する。(このメソッドはMySQLドライバ内の同一メソッドをSQLite用に修正したものです)
/**
* Show column query
*
* Generates a platform-specific query string so that the column names can be fetched
*
* @access public
* @param string the table name
* @return string
*/
function _list_columns($table = '')
{
return "PRAGMA table_info(" . $table . ");";
}
- /system/database/DB_driver.php 内の l.833-835 を下記のように書き換えます。
if (isset($row['COLUMN_NAME']))
{
$retval[] = $row['COLUMN_NAME'];
}
↓
if (isset($row['COLUMN_NAME']) || isset($row['name']))
{
$retval[] = isset($row['COLUMN_NAME']) ? $row['COLUMN_NAME'] : $row['name'];
}
これで、SQLite3でも 「$this->db->list_fields()」 を使ってカラム名が取得できるようになります。