2013-03-11 26 views
7

CodeIgniter ile birden fazla veritabanını kullanmaktayım. Veritabanlarının önceden neler olduğunu biliyorsam, bilgileri config dosyasında ayarlayabilir ve sonra ihtiyaç duyduğum veritabanı grubunu arayabilirim. Ancak, durumumda, bu veritabanı bilgisini başka bir veritabanında saklamak zorundayım. Bu, müşterinin verilerinin depolandığı veritabanı ve kimlik bilgileri dahil olmak üzere bir müşteri hakkında genel bilgiler içeren bir ana veritabanıdır. Bu satıcı, istedikleri zaman müşterileri ekleyebilir ve her müşterinin verilerini farklı veritabanlarında ayrıştırır.CodeIgniter: Çoklu Veritabanları - İkinci bir veritabanında veritabanı yapılandırmasına erişme

Veritabanı ve kimlik bilgilerini CodeIgniter'deki ana veritabanından geri aldığım değerlere göre nasıl ayarlayabilirim, yoksa bunu yapmanın bir yolu var mı?

Beni doğru yöne yönlendiren var mı? Herhangi bir tavsiye için şimdiden teşekkür ederiz. Dokümanlar

+0

[Codeigniter - çoklu veritabanı bağlantıları] 'nın olası kopyası (http://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections) –

cevap

9

(http://ellislab.com/codeigniter/user-guide/database/connecting.html):

Bu fonksiyonun ilk parametresi isteğe bağlı olarak sizin yapılandırma dosyasından belirli bir veritabanı grubu belirtmek için kullanılabilir veya hatta bir bağlantı değerlerini gönderebilirsiniz yapılandırma dosyasında yapılandırma dosyasında belirtilmemiş veritabanı.

Yani usta veritabanından değerlerle değerleri yerine böyle bir şey yapacağını:

$config['hostname'] = "localhost"; 
$config['username'] = "myusername"; 
$config['password'] = "mypassword"; 
$config['database'] = "mydatabase"; 
$config['dbdriver'] = "mysql"; 
$config['dbprefix'] = ""; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 
$config['cache_on'] = FALSE; 
$config['cachedir'] = ""; 
$config['char_set'] = "utf8"; 
$config['dbcollat'] = "utf8_general_ci"; 

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

Eğer usta veritabanına bağlantı ve müşteriyi korumak gerekiyorsa veritabanı, daha sonra aşağıdaki satırı değiştirin:

+1

Bir diziyi veya DSN dizesini (her zaman Burada bir soru gönderirken en büyük korku). Yanıt için çok teşekkürler! – spacemunkee

6

Master'ı varsayılan veritabanı ve ikinci veritabanı için müşteriye
$ active_group = 'default' yapın; $ active_record = TRUE;

$db['default']['hostname'] = ''; 
    $db['default']['username'] = ''; 
    $db['default']['password'] = ''; 
    $db['default']['dbdriver'] = ''; 
    $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['default']['swap_pre'] = ''; 
    $db['default']['autoinit'] = TRUE; 
    $db['default']['stricton'] = FALSE; 

    $db['secondDatabase']['hostname'] = ''; 
    $db['secondDatabase']['username'] = ''; 
    $db['secondDatabase']['password'] = ''; 
    $db['secondDatabase']['dbdriver'] = ''; 
    $db['secondDatabase']['dbprefix'] = ''; 
    $db['secondDatabase']['pconnect'] = TRUE; 
    $db['secondDatabase']['db_debug'] = TRUE; 
    $db['secondDatabase']['cache_on'] = FALSE; 
    $db['secondDatabase']['cachedir'] = ''; 
    $db['secondDatabase']['char_set'] = 'utf8'; 
    $db['secondDatabase']['dbcollat'] = 'utf8_general_ci'; 
    $db['secondDatabase']['swap_pre'] = ''; 
    $db['secondDatabase']['autoinit'] = TRUE; 
    $db['secondDatabase']['stricton'] = FALSE; 

Eğer

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

/** config/DatabaseFunctions.php **/

$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = ''; 
$db['default']['username'] = ''; 
$db['default']['password'] = ''; 
$db['default']['dbdriver'] = ''; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = (ENVIRONMENT !== 'production'); 
$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; 

/** Kişisel denetleyicisi veya tarafından denetleyicisi veya modelinde ikinci veritabanı yükleyebilirsiniz model **/

//by default the master database will be loaded and you can directly access db using  $this->db 
    $result = $this->db->query("SELECT * FROM `your_table`")->limit(1)->get()->result(); 



$config['dbxyz']['hostname'] = $result->hostname; 
$config['dbxyz']['username'] = $result->username; 
$config['dbxyz']['password'] = $result->password; 
$config['dbxyz']['dbdriver'] = ''; 
$config['dbxyz']['dbprefix'] = ''; 
$config['dbxyz']['pconnect'] = TRUE; 
$config['dbxyz']['db_debug'] = (ENVIRONMENT !== 'production'); 
$config['dbxyz']['cache_on'] = FALSE; 
$config['dbxyz']['cachedir'] = ''; 
$config['dbxyz']['char_set'] = 'utf8'; 
$config['dbxyz']['dbcollat'] = 'utf8_general_ci'; 
$config['dbxyz']['swap_pre'] = ''; 
$config['dbxyz']['autoinit'] = TRUE; 
$config['dbxyz']['stricton'] = FALSE; 

//load database config 
$this->config->load('database'); 

//Set database config dynamically   
$this->config->set_item('dbxyz', $config); 

//Now you can load the new database using 
$this->dbxyz = $this->load->database('dbxyz'); 

Not: Daha fazla bilgi için s, Config Class Codeigniter documentation

1

\ config \ DatabaseFunctions.php

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

Şimdi aşağıda gibi bizim Denetleyici ve modelde ikinci veritabanını kullanır uygulamada sınırının altında Ekle bakın.

$CI = &get_instance(); 
$this->db2 = $CI->load->database('mydb2', TRUE); 
$qry = $this->db2->query("SELECT * FROM employee"); 
print_r($qry->result()); 

benim için http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php .Bu çalışmasından referans almış.

İlgili konular