我见过this topic并试图以这种方式实施,但不幸的是没有用。
我需要使用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();
}
}
这会引发错误:
错误号码:1146
表'clockin_admin.company'不存在
SELECT * FROM(
company
)文件名: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();
}
}
这会引发错误:
致命错误:在非对象中调用成员函数get() 在线C:\ xampp \ htdocs \ clockin \ application \ models \ company_model.php 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;
答案 0 :(得分:1)
您可以在加载数据库后更改配置:
class Company_model extends CI_model
{
private $otherDb;
public function __construct()
{
parent::__construct();
$this->load->database();
$this->db->hostname = 'localhsot';
$this->db->username = 'root';
$this->db->password = '';
$this->db->database = 'clockin_AlKj';
$this->db->dbprefix = '';
$this->db->pconnect = FALSE;
$this->db->db_debug = TRUE;
}
public function get()
{
$this->db->get('company')->row();
}
}
你无法以这种方式改变司机。
答案 1 :(得分:1)
抱歉,我一开始给了你错误的答案。我只是忽略了CodeIgniter代码而且它可能很难实现。这是另一种解决方案:
您可以使用“连接字符串”作为第一个参数来动态创建数据库,并使用TRUE作为第二个参数,因此它不会替换$this->db
var,而只是将数据库对象返回到{{1} }:
$this->otherDb
它应该像预期的那样工作
如果要设置dbprefix,pconnect或db_debug,可以通过定义“连接字符串”的查询部分来实现:
$this->otherDb = $this->load->database('mysql://username:password@hostname:9090/database',TRUE);
来源:https://ellislab.com/codeigniter/user-guide/database/connecting.html
答案 2 :(得分:1)
请尝试将其用于mysqli的持续版本
$this->otherDb = $this->load->database('mysqli://username:password@hostname:3306/database',TRUE);