2012-06-27 20 views
5

Tôi có một cơ sở dữ liệu CodeIgniter và một số cơ sở dữ liệu Mysql. Nhưng biết tôi muốn thiết lập cơ sở dữ liệu khác để làm việc, và sau khi một số hành động làm vô hiệu hóa nó. Ví dụ, tôi có chức năng make_some_actions_with_db(), và bây giờ tôi cần phải có một cái gì đó như thế:Làm cách nào để tải một cơ sở dữ liệu khác bằng CodeIgniter?

public function action() 
{ 
//load db 
make_some_actions_with_db(); 
//disable db 
} 

Vì vậy, bây giờ tôi cần phải biết làm thế nào tôi có thể thiết lập các db mặc định mới và làm thế nào tôi có thể thiết lập một (đầu tiên) db. Cảm ơn bạn.

CẬP NHẬT: Nó không làm việc:

public function update_record_insert_test() 
    { 
     if ($this->facebook->getUser()) 
     { 
      $another_db_settings['hostname'] = 'localhost'; 
      $another_db_settings['username'] = 'root'; 
      $another_db_settings['password'] = ''; 
      $another_db_settings['database'] = 'name'; 
      $another_db_settings['dbdriver'] = "mysql"; 
      $another_db_settings['dbprefix'] = ""; 
      $another_db_settings['pconnect'] = TRUE; 
      $another_db_settings['db_debug'] = TRUE; 
      $another_db_settings['cache_on'] = FALSE; 
      $another_db_settings['cachedir'] = ""; 
      $another_db_settings['char_set'] = "utf8"; 
      $another_db_settings['dbcollat'] = "utf8_general_ci"; 
      $this->load->database($another_db_settings); 

      $_POST['id']='AccountPagesView.a_book/1000'; 
      $_POST['value']='test'; 
      $_POST['old_value']='not'; 
      $welcome=new Welcome(); 
      $welcome->update_record(); 
     } 
     else 
     { 
      $url=$this->facebook->getLoginUrl(array('next' => base_url().'update_record_insert_test')); 
      redirect($url); 
     } 
    } 

Trả lời

9

Trong bạn config/database.php cơ sở dữ liệu của bạn được cấu hình để nhóm 'mặc định', như vậy:

$db['default']['hostname'] = 'host'; 
$db['default']['username'] = 'username'; 
$db['default']['password'] = 'password'; 
$db['default']['database'] = 'database'; 

này cho phép bạn chỉ định các nhóm khác như sau:

$db['second']['hostname'] = 'host'; 
$db['second']['username'] = 'username'; 
$db['second']['password'] = 'password'; 
$db['second']['database'] = 'database'; 

$db['third']['hostname'] = 'host'; 
$db['third']['username'] = 'username'; 
$db['third']['password'] = 'password'; 
$db['third']['database'] = 'database'; 

Sau đó bạn có thể kết nối với cơ sở dữ liệu khác bằng cách sử dụng:

$defaultDB = $this->load->database('default', TRUE); 
$secondDB = $this->load->database('second', TRUE); 

Bằng cách vượt qua true như giá trị thứ hai, nó sẽ trả lại đối tượng cơ sở dữ liệu, cho phép bạn sử dụng một cách an toàn các phương pháp tương tự cho mỗi cơ sở dữ liệu, như vậy:

$default->get('table'); 
$second->get('different_table'); 
+0

Bây giờ tôi thực hiện tất cả yêu cầu bằng $ this-> db-> get (.. .), và tôi không thể thay đổi mã này, nhưng có cùng một db với cùng một bảng, tôi cần phải thay đổi db mặc định này này. Tôi phải làm việc đó như thế nào? Ví dụ, bây giờ tôi có cơ sở dữ liệu "db1", và thứ hai là "db1_copy" - tôi cần tất cả các yêu cầu tương tự $ this-> db -> ... sẽ được thực hiện với "db1_copy". – user1477886

+0

Nếu bạn có thể thay đổi cấu hình, hãy thay đổi chi tiết cho nhóm 'default' thành chi tiết của 'db1_copy'. Cần làm việc? – cchana

+0

No. Tôi vừa thử và nó không hoạt động. – user1477886

0

Nếu bạn muốn thay đổi các kết nối cơ sở dữ liệu mặc định (mà tôi không khuyên bạn), bạn có thể làm:

$another_db_settings['hostname'] = ''; 
$another_db_settings['username'] = ''; 
$another_db_settings['password'] = ''; 
$another_db_settings['database'] = ''; 
$another_db_settings['dbdriver'] = "mysql"; 
$another_db_settings['dbprefix'] = ""; 
$another_db_settings['pconnect'] = TRUE; 
$another_db_settings['db_debug'] = TRUE; 
$another_db_settings['cache_on'] = FALSE; 
$another_db_settings['cachedir'] = ""; 
$another_db_settings['char_set'] = "utf8"; 
$another_db_settings['dbcollat'] = "utf8_general_ci"; 
$this->load->database($another_db_settings); 

Sau đó, cơ sở dữ liệu mới có thể được truy cập thông qua $ this-> db, nhưng tôi khuyên bạn nên làm những gì cchana đề xuất và gán kết nối mới cho biến khác qua

$new_db = $this->load->database($another_db_settings, TRUE); 
+0

Đề xuất của bạn không hoạt động. Vui lòng kiểm tra câu hỏi cập nhật. – user1477886

+0

Bạn có thể hiển thị lớp Chào mừng không? Tôi không thấy lý do tại sao bạn sẽ cần một kết nối cơ sở dữ liệu trong trường hợp này. Hàm – marshall

+0

update_record() trong lớp Chào mừng thực hiện một số thao tác với cơ sở dữ liệu chính. Tôi cần phải kiểm tra nó, và tôi muốn sử dụng cho nó bản sao của db chính. – user1477886

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