2012-06-27 20 views
5

Tengo un CodeIgniter y alguna base de datos Mysql. Pero sé que quiero establecer otra base de datos para trabajar, y después de algunas acciones deshabilitarla. Por ejemplo, tengo la función make_some_actions_with_db(), y ahora tengo que tener algo así:¿Cómo cargar otra base de datos usando CodeIgniter?

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

lo tanto, ahora tengo que saber cómo puedo establecer la nueva db defecto y cómo puedo fijar otra (primera) db. Gracias.

Actualizado: no funciona:

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

Respuesta

9

En su config/database.php su base de datos está configurado para el grupo 'por defecto', así:

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

Esto le permite a especifique otros grupos como este:

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

A continuación, puede conectarse a otra base de datos mediante el uso de:

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

Al pasar true como el segundo valor, se devolverá el objeto de base de datos, lo que permite utilizar de forma segura los mismos métodos para cada base de datos, así:

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

Ahora hago todas las solicitudes usando $ this-> db-> get (.. .), y no puedo cambiar este código, pero hay el mismo DB con las mismas tablas, necesito cambiar el DB predeterminado este este. ¿Cómo puedo hacerlo? Por ejemplo, ahora tengo la base de datos "db1" y la segunda es "db1_copy" - Necesito que todas las solicitudes similares $ this-> db -> ... se ejecuten con "db1_copy". – user1477886

+0

Si puede cambiar la configuración, cambie los detalles para el grupo 'predeterminado' a los detalles de 'db1_copy'. ¿Eso debería funcionar? – cchana

+0

No. Acabo de probar y no funciona. – user1477886

0

Si desea cambiar la conexión de base de datos por defecto (que no recomiendo) que puede hacer:

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

a continuación, la nueva base de datos Se puede acceder a través de $ this-> db, pero yo recomendaría hacer lo que sugirió cchana y asignar la nueva conexión a través de otra variable

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

Su recomendación no funciona. Por favor revise la pregunta actualizada. – user1477886

+0

¿Podría mostrar la clase de Bienvenida? No veo por qué necesitaría otra conexión de base de datos en este caso. – marshall

+0

función update_record() en la clase de bienvenida realiza algunas acciones con la base de datos principal. Necesito probarlo, y quiero usar una copia de db principal. – user1477886

Cuestiones relacionadas