2015-02-08 4 views
0

, поскольку я использую 3 различные базы данных, я пытаюсь получить динамическое подключение к базе данных, но я получаю сообщение об ошибке при попытке запустить этот код:Ошибки при попытке получить динамическую базу данных

<?php 
class Connection_model extends CI_Model { 
    private $sender_db; 
    private $sender_host; 
    private $sender_user; 
    private $sender_pw; 
    private $receiver_db; 
    private $receiver_host; 
    private $receiver_user; 
    private $receiver_pw; 

    private function define_database() { 
     $db['sender'] = array(
       'dsn' => '', 
       'hostname' => $this->sender_host, 
       'username' => $this->sender_user, 
       'password' => $this->sender_pw, 
       'database' => $this->sender_db, 
       'dbdriver' => 'mysqli', 
       'dbprefix' => '', 
       'pconnect' => FALSE, 
       'db_debug' => TRUE, 
       'cache_on' => FALSE, 
       'cachedir' => '', 
       'char_set' => 'utf8', 
       'dbcollat' => 'utf8_general_ci', 
       'swap_pre' => '', 
       'autoinit' => TRUE, 
       'encrypt' => FALSE, 
       'compress' => FALSE, 
       'stricton' => FALSE, 
       'failover' => array(), 
       'save_queries' => TRUE 
     ); 
     return $db['sender']; 
    } 

    public function establish($target = 'both') { 
     if ($target == 'sender') { 
      $this->sender_db = $this->session->get_userdata('sender_db'); 
      $this->sender_host = $this->session->get_userdata('sender_host'); 
      $this->sender_user = $this->session->get_userdata('sender_user'); 
      $this->sender_pw = $this->session->get_userdata('sender_pw'); 

      $otherdb = $this->load->database($this->define_database(), TRUE); 
     } 
    } 

} 

Ошибка говорит :

Сообщение: Undefined смещение: 0

Что я делаю неправильно?

+1

она не включает в себя какие строки кода? распечатать ошибку, вызванную воспламенением кода –

ответ

1

Если вам необходимо использовать несколько баз данных, просто установите несколько массивов в вашем приложения/Config/database.php

/*DEFAULT DATABASE*/ 
$active_group = 'default'; 
$active_record = TRUE; 

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'mylogin'; 
$db['default']['password'] = 'mypassword'; 
$db['default']['database'] = 'database1'; 
$db['default']['dbdriver'] = 'mysqli'; 
$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; 


/*SECOND DATABASE*/  
$db['seconddb']['hostname'] = 'localhost'; 
$db['seconddb']['username'] = 'mylogin'; 
$db['seconddb']['password'] = 'mypassword'; 
$db['seconddb']['database'] = 'database2'; 
$db['seconddb']['dbdriver'] = 'mysqli'; 
$db['seconddb']['dbprefix'] = ''; 
$db['seconddb']['pconnect'] = TRUE; 
$db['seconddb']['db_debug'] = TRUE; 
$db['seconddb']['cache_on'] = FALSE; 
$db['seconddb']['cachedir'] = ''; 
$db['seconddb']['char_set'] = 'utf8'; 
$db['seconddb']['dbcollat'] = 'utf8_general_ci'; 
$db['seconddb']['swap_pre'] = ''; 
$db['seconddb']['autoinit'] = TRUE; 
$db['seconddb']['stricton'] = FALSE; 

Тогда в вашей модели,

$second_db = $this->load->database('seconddb', TRUE); 
$query = $second_db->get('mytable'); 

Более подробную информацию: http://www.codeigniter.com/user_guide/database/connecting.html

1

Вы можете установить переменную

$config['hostname'] = "localhost"; 
$config['username'] = "myusername"; 
$config['password'] = "mypassword"; 
$config['database'] = "mydatabase"; 
$config['dbdriver'] = "mysql"; 
$config['dbprefix'] = ""; 
$config['pconnect'] = FALSE; 
$config['db_debug'] = TRUE; 

Используйте другое имя, то $ конфигурации и разобрать на модели с использованием

$this->load->model('Model_name', '', $config); 

(извлеченного из CI документации)

Смежные вопросы