CodeIgniter 1.7.0 Oracle10g Oci8 ManTHeB
16th February 2009Singkat aja.. In my last project, gw coba develop aplikasi pake CodeIgniter versi 1.7.0 *selanjutnya di baca CI* dengan Oracle 10g *selanjutnya di baca 10g*. Tapi entah kenapa CI nggak mo konek sama 10g, udh coba cari ke om google, coba tanya ke rumah codeigniter, sampe ke halaman bug tracker, tetep nggak ketemu… jadi terpaksa deh bongkar sedikit coding si CI.
Telusur punya telusur, ternyata ada beberapa bugs ato mungkin developer CI lupa ato ntah nggak sengaja; yang pasti, biar CI bisa konek ke 10g *ato mungkin versi Oracle lainnya* beberapa baris kode kudu gw ubah. Berikut penerawangannya:
pada file …\system\database\drivers\oci8\oci8_driver.php
//line 49
var $_escape_char = ‘”‘;
ubah menjadi
//line 49
var $_escape_char = ”;
masih di file yang sama
//line 373
function escape_str($str)
{
// Access the CI object
$CI =& get_instance();return $CI->_remove_invisible_characters($str);
}
ubah menjadi
//line 373
function escape_str($str)
{
// Access the CI object
$CI =& get_instance();return $CI->input->_remove_invisible_characters($str);
}
sebetulnya cuma segitu yang perlu di ubah, namun guna memaksimalkan query untuk setiap Database Engine, ada baiknya code berikut juga di permak
pada file …\system\database\DB_active_rec.php
//line 1505
if (count($this->ar_like) > 0)
{
if (count($this->ar_where) > 0)
{
$sql .= “\nAND “;
}$sql .= implode(“\n”, $this->ar_like);
}
ubah menjadi
//line 1505
if (count($this->ar_like) > 0)
{
if (count($this->ar_where) > 0)
{
$sql .= ” AND “;
}$sql .= “(“.implode(“\n”, $this->ar_like).”)”;
}
slese bongkar kode, selanjutnya konfigurasi koneksi database di …\system\application\config\database.php
$active_group = “default”;
$active_record = TRUE;$db['default']['hostname'] = “TNSNAMEorSIDorSERVICE”;
$db['default']['username'] = “user_schema”;
$db['default']['password'] = “password_user_schema”;
$db['default']['database'] = “”;
$db['default']['dbdriver'] = “oci8″;
$db['default']['dbprefix'] = “”;
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = “”;
$db['default']['char_set'] = “utf8″;
$db['default']['dbcollat'] = “utf8_general_ci”;
terlihat dalam konfigurasi, tidak ada nama schema ato database yang dipilih, soalnya koneksi akan otomatis mengarah pada schema yang sesuai dengan username. *diamana username sebelumnya sudah di grant pada schema tertentu (yang akan digunakan) melalui Oracle Console/Enterprise*
Segitu aja dari gw, mudah-mudahan membantu.
beuh bener2 ManTHeB…
*roming*
te… sekalian benerin fungsi redirect() nya men… :p
Agh… sugan teh naon… nu kieu hungkul…
teu ngarti aink ah…
@ariawan,
gak pernah pakek gw :p
lha.. emang kenapa dengan redirect() nya men?
@Jay,
okeh lah sip heu euh ManTHeB
gimana klo kaea gini mas..
saya cuma nyoba2…
function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}
return $str;
}
// Access the CI object
$CI =& get_instance();
$str = $CI->input->_remove_invisible_characters($str);
// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace( array(‘%’, ‘_’, $this->_like_escape_chr),
array($this->_like_escape_chr.’%', $this->_like_escape_chr.’_', $this->_like_escape_chr.$this->_like_escape_chr),
$str);
}
return $str;
}