2013-03-11 40 views
7

Tôi đã xem xét sử dụng nhiều cơ sở dữ liệu với CodeIgniter. Nếu tôi biết những gì cơ sở dữ liệu được trước thời hạn, sau đó tôi có thể thiết lập các thông tin trong tập tin cấu hình và sau đó gọi bất cứ nhóm cơ sở dữ liệu tôi cần.CodeIgniter: Multiple Databases - Truy cập cấu hình cơ sở dữ liệu trong cơ sở dữ liệu thứ hai

Trong trường hợp của tôi, tuy nhiên, tôi cần phải lưu trữ thông tin cơ sở dữ liệu đó trong cơ sở dữ liệu khác. Nó là một cơ sở dữ liệu tổng thể với thông tin chung về khách hàng bao gồm cơ sở dữ liệu và thông tin đăng nhập mà dữ liệu của khách hàng được lưu trữ.

Làm cách nào tôi có thể đặt cơ sở dữ liệu và thông tin đăng nhập dựa trên các giá trị tôi lấy lại từ cơ sở dữ liệu chính trong CodeIgniter hoặc thậm chí có cách để thực hiện điều đó không?

Có ai có thể chỉ cho tôi đúng hướng không? Cảm ơn trước cho tất cả lời khuyên.

+0

bản sao có thể có của [Trình mã vạch - nhiều kết nối cơ sở dữ liệu] (http://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections) –

Trả lời

9

Từ các tài liệu (http://ellislab.com/codeigniter/user-guide/database/connecting.html):

Tham số đầu tiên của chức năng này có thể tùy chọn được sử dụng để xác định một nhóm cơ sở dữ liệu cụ thể từ tập tin cấu hình của bạn, hay thậm chí bạn có thể gửi các giá trị kết nối cho một cơ sở dữ liệu không được chỉ định trong tệp cấu hình của bạn.

Vì vậy, bạn sẽ làm điều gì đó như thế này, thay thế các giá trị với giá trị từ chủ cơ sở dữ liệu:

$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); 

Nếu bạn cần phải duy trì một kết nối đến chủ cơ sở dữ liệukhách hàng cơ sở dữ liệu, sau đó thay đổi dòng cuối cùng thành:

$customer_db = $this->load->database($config, TRUE); 

// to use the master database: 
$this->db->query("SELECT * FROM my_table"); 

// to then use the customer database: 
$customer_db->query("SELECT * FROM whatever"); 
+1

Tôi hoàn toàn bỏ lỡ rằng bạn có thể chuyển một mảng hoặc chuỗi DSN (luôn luôn là của tôi sợ hãi nhất khi đăng câu hỏi ở đây). Cảm ơn nhiều vì sự phản hồi! – spacemunkee

6

Đặt làm chủ cơ sở dữ liệu mặc định và khách hàng cho cơ sở dữ liệu thứ hai
$ active_group = 'mặc định'; $ 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; 

bạn có thể tải cơ sở dữ liệu thứ hai trong bộ điều khiển hoặc trong mô hình bởi

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

/** config/database.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; 

/** controller của bạn hoặc 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'); 

LƯU Ý: Để biết thêm chi tiết s, tham khảo Config Class Codeigniter documentation

1

Thêm bên dưới dòng trong ứng dụng \ config \ database.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; 

Bây giờ chúng tôi sử dụng cơ sở dữ liệu thứ hai của chúng tôi trong điều khiển và mô hình của chúng tôi như dưới đây.

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

Tôi đã tham chiếu từ http://www.tutsway.com/use-multiple-db-connections-in-codeigniter.php. Đó là công việc dành cho tôi.

Các vấn đề liên quan