Codeigniter - Kullanarak Çoklu Veritabanları

4 Cevap php

database.php:

$db['default']['hostname'] = "192.168.2.104";
$db['default']['username'] = "webuser";
$db['default']['password'] = "----";
$db['default']['database'] = "vad";
$db['default']['dbdriver'] = "mysql";
$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";

$db['stats']['hostname'] = "192.168.2.104";
$db['stats']['username'] = "webuser";
$db['stats']['password'] = "---";
$db['stats']['database'] = "vad_stats";
$db['stats']['dbdriver'] = "mysql";
$db['stats']['dbprefix'] = "";
$db['stats']['pconnect'] = TRUE;
$db['stats']['db_debug'] = TRUE;
$db['stats']['cache_on'] = FALSE;
$db['stats']['cachedir'] = "";
$db['stats']['char_set'] = "utf8";
$db['stats']['dbcollat'] = "utf8_general_ci";

The issue is I can only define in the configuration one $active_group, default, or stats. I followed the CodeIgniter documentation and I added the following:

$DB2 = $this->load->database('stats', TRUE);

Bu şekilde ben ikinci veritabanına bağlanmak, ama ben ilkine bağlantısını kaybedebilir. Herkes nasıl tüm modeller kurucular olarak aşağıdakileri yapmak zorunda kalmadan iki veritabanı yükleyebilirsiniz herhangi bir fikir var mı?

$database1 = $this->load->database('database1', TRUE);
$database2 = $this->load->database('database2', TRUE); 

Selamlar,

Pedro

4 Cevap

Bunun yerine Camacho tarafından belirtildiği gibi kesmek uygulanması da tüm bağlantılar için FALSE database.php dosyasındaki 'pconnect'-bayrağı ayarlayabilirsiniz.

http://codeigniter.com/bug_tracker/bug/2703/ sorunu için bkz.

CodeIgniter'daki bir hata var. Bir sınıfa bir satırı ekleyerek her şeyi çözecektir. Burada orijinal kaynak: http://koorb.wordpress.com/2007/11/16/codeigniter-connect-to-multiple-databases/

** Bu düzeltme PostgreSQL için geçerli değildir

İşte bu site batana durumda bir kopyasıdır.

Satır numarası değişti. İşte CodeIgniter bug düzeltme:

start bugfix

Tanım

veritabanı tüm aramaları (sonuncusu başlatıldı) aynı veritabanına gitmek

Sorun / sistem / veritabanı / DB_driver.php yılında simple_query işlevini değiştirmek düzeltmek için:

function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }

    $this->db_select(); //<-----------------  Added this line
    return $this->_execute($sql);
}

Bu tamamen sorunu giderir, böylece bir modelinde bu gibi şeyler yapabilirsiniz

$this->legacy_db = $this->load->database('legacy', true);

Ben çerçeve üzerine DB_driver.php değiştirerek sorunu çözmek.

Bu işlevde I $this->db_select(); ekleyebilir ve 2 veritabanları ile çalışırken tekrar bağlantınızı kaybetmezsiniz.

function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }

    $this->db_select();

    return $this->_execute($sql);
}

Siz session.php dosyasında fonksiyonu CI_Session () değiştirerek deneyebilirsiniz.

Değiştirmek

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

bununla

$this->CI->db1 = $this->CI->load->database('default', TRUE);
$this->CI->db2 = $this->CI->load->database('db2', TRUE);

Bu şekilde, tüm model dosyalarında 2 dbs yüklemek gerekmez ama nesneleri kullanarak bunları doğrudan kullanmak zorundadır.

$this->db1 varsayılan grup db erişim olacağını ve $this->db2 DB2 grubu db erişim olacaktır. (Her ikisi de db gruplar database.php tanımlanmış olmalıdır)


Sundar