我正在尝试将我的应用程序连接到两个数据库。一个是MySQL,一个是MSSQL。我试图在Google上找到一个可以开始的地方,但我并没有成功。我没有在以前的问题上找到任何有用的东西,类似于我的StackOverflow。
您是否有人将CI应用程序与MySQL和MSSQL连接?
答案 0 :(得分:6)
您可以将db配置放在application / config / database.php上,如下例所示:
$active_group = "default";
$active_record = TRUE;
/*MYSQL DB config EXMPALE */
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'username';
$db['default']['password'] = 'pass';
$db['default']['database'] = 'DATABASE_NAME';
$db['default']['dbdriver'] = 'mysqli';
//...
/* MSSQL DB config EXMPALE, note the first param my_mssql */
$db['my_mssql']['hostname'] = 'SQL SERVER IP';
$db['my_mssql']['username'] = 'username';
$db['my_mssql']['password'] = 'pass';
$db['my_mssql']['database'] = 'DATABASE_NAME';
$db['my_mssql']['dbdriver'] = 'mssql';
//...
请注意,如果您调用,我们将默认组设为mysql $这 - > DB-> .. 它将使用默认组db。
用于查询另一个连接ex。 MSSQL你将在你的模型中添加这样的东西
class example_model extends CI_Model
{
var $mssql;
function __construct()
{
parent::__construct();
$this->mssql = $this->load->database ( 'my_mssql', TRUE );
}
function get_some_mssql_rows(){
//use $this->mssql instead of $this->db
$query = $this->mssql->query('select * from mssql_table');
//...
}
function get_some_mysql_rows(){
//use $this->db for default
$query = $this->db->query('select * from mysql_table');
//...
}
}
您可以将这种方式用于许多dbs连接,例如read replica,例如
答案 1 :(得分:1)
您只需在“application / config / database.php”文件中添加两个数据库连接详细信息。确保为每个设置正确的dbdriver字段,即“mysql”和“mssql”。
答案 2 :(得分:0)
我使用以下设置让它工作
在database.php文件中放下面的内容。注意替换两个配置的主机名,用户名,密码和数据库的占位符。
active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => 'xxx.xxx.xxx.xxx',
'username' => '<username>',
'password' => '<password>',
'database' => '<database>',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
$db['MSSQL'] = array(
'hostname' => '<MSSQLHOSTIP\INSTANCE>',
'username' => '<mssqluser>',
'password' => '<mssqlpassword>',
'database' => '<mssqldatabasename>',
'dbdriver' => 'sqlsrv',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
第二个配置使用MSSQL作为组名,这将用于在下面的模型类中加载DB。 我用较少的选项尝试了配置,但它不会加载所以我使用了默认配置中的所有选项
定义类变量var $mssql
并使用$this->mssql = $this->load->database ( 'MSSQL', TRUE );
class User_model extends CI_Model
{
var $mssql;
function __construct()
{
parent::__construct();
$this->mssql = $this->load->database ( 'MSSQL', TRUE );
}
function GetUsers(){
$query = $this->mssql->query('Select * from [YOURTABLE]');
$res = $query->result();
return $res;
}
}
结果以对象数组的形式返回。
希望这有助于某人
答案 3 :(得分:0)
尝试一下:
$db['default'] = array(
'dsn' => 'sqlsrv:server=127.0.0.1,1433;Database=YourDatabaseName',
'hostname' => '',
'username' => '',
'password' => '',
'database' => 'YourDatabaseName',
'dbdriver' => 'sqlsrv',
'save_queries' => TRUE);