Как подключиться к пользовательскому DSN с помощью codeigniter? - PullRequest
1 голос
/ 05 августа 2011

Я могу подключиться к пользовательскому DSN на моем компьютере с Linux (используя ODBC).

Как мне установить соединение с помощью воспламенителя кода?

в моем файле database.php У меня есть база данных по умолчанию:

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

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'user';
$db['default']['password'] = 'pass';
$db['default']['database'] = 'db_main';
$db['default']['dbdriver'] = 'mysql';
$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;

однако мне также необходимо одновременно подключиться к другой базе данных, используя ODBC:

Итак, у меня в контроллере:

public function index()
    { 

         $dsn = 'NZSQL://someuser:password@host/somedatabase';
         $this->load->database($dsn);
         $this->db->query("SELECT * FROM Cust Limit 10");
         $result = $this->db->result();
    }

Я получаю ошибку:

Произошла ошибка базы данных

Номер ошибки: 1146

Таблица 'db_main.Cust' не существует

SELECT * FROM Cust Limit 10

Имя файла: /var/www/controllers/netezzatest.php

Номер строки: 28

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Для каждой БД, к которой вы подключаетесь, Code Igniter потребует от вас создания нового объекта базы данных. Вы должны полностью построить каждую БД в файле конфигурации, а затем ссылаться на них по имени (ключ массива) при вызове $ this-> load-> database ().

Подробнее см. Подключение к нескольким базам данных . Но, по сути, вам нужно использовать это для подключения (создания объекта для каждой БД):

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);

Затем выполните запросы к каждому:

$DB1->query();
$DB1->result();

И

$DB2->query();
$DB2->result();
1 голос
/ 05 августа 2011

При подключении ко 2-й базе данных вам нужно, чтобы она возвращала вам объект, чтобы вы могли его использовать. Передача true в качестве 2-го параметра в load->database возвращает объект db.

$dsn = 'NZSQL://someuser:password@host/somedatabase';
$dsnDB = $this->load->database($dsn, TRUE);
$query = $dsnDB->query("SELECT * FROM Cust Limit 10");
$result = $query>result();

В этом случае $this->db - это ваша база данных mysql, а $dsnDB - это другая.

...