Я видел this topic и пытался реализовать этот путь и к несчастью не работает.CodeIgniter динамическая база данных не работает
Мне нужно динамически подключаться к базе данных с помощью CodeIgniter. Эта база данных не может быть константой переменной в файле application/config/databases.php
. Я пробовал два разных способа подключения к другой базе данных:
Первый по модели - с третьим параметром, как documentation refers.
class users extends CI_Controller
{
public function __construct()
{
parent::_construct();
$config['hostname'] = 'localhost';
$config['username'] = 'root';
$config['password'] = '';
$config['database'] = 'clockin_AlKj';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('company_model', '', $config);
$this->company = $this->company_model->get();
}
}
Это бросает ошибку:
Error Number: 1146
Table 'clockin_admin.company' doesn't exist
SELECT * FROM (
company
)Filename: C:\xampp\htdocs\clockin\system\database\DB_driver.php
Второй способ подключения с помощью базы данных.
class users extends CI_Controller
{
public function __construct()
{
parent::_construct();
$this->load->model('company_model');
$this->company = $this->company_model->get();
}
}
class Company_model extends CI_model
{
private $otherDb;
public function __construct()
{
parent::__construct();
$config['hostname'] = 'localhost';
$config['username'] = 'root';
$config['password'] = '';
$config['database'] = 'clockin_AlKj';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->otherDb = $this->load->database($config);
}
public function get()
{
$this->otherDb->get('company')->row();
}
}
Это бросает ошибку:
Fatal error: Call to a member function get() on a non-object in C:\xampp\htdocs\clockin\application\models\company_model.php on line 45
который относится к линии $this->otherDb->get('company')->row();
Проблема в том, что если я проверить, если соединение было установлено, это также возвращает ошибку.
if($this->load->database($config) === FALSE)
echo 'Yes, I could not connect..';
Наконец, моя конфигурация файла database.php
заключается в следующем:
$active_group = 'default';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'clockin_admin';
$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;
Он все еще не работает.Он продолжает фокусировать базу данных, установленную в файле 'database.php'. '$ this-> otherDb = $ this-> load-> database ('mysql: // root: @localhost: 9090/clockin_AlKj', TRUE);' – Linesofcode
Вы уверены? Я только что протестировал, и этот метод работает. возможно, ваша строка пароля содержит некоторые символы, которые могут смутить парсер? Кроме того, сервер действительно работает на порту 9090? если это порт по умолчанию, вам не нужно указывать его. – emiliopedrollo
Вы вернули метод get в $ this-> otherDb-> get ('company') -> row(); ? – emiliopedrollo