Usa MSSQL e MySQL con CodeIgniter

Sto cercando di colbind la mia applicazione a due database. Uno è MySQL e uno è MSSQL. Ho cercato di trovare un punto di partenza su Google, ma non ho avuto successo. Non ho trovato nulla di utile su domande precedenti simili a quelle su StackOverflow.

Qualcuno di voi ha collegato l'app CI con MySQL e MSSQL?

puoi mettere il tuo db config su application / config / database.php come questo esempio:

$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'; //... 

Si noti che il gruppo predefinito è mysql, quindi se si chiama $ this-> db-> .. verrà utilizzato il gruppo predefinito db.

per la query con un'altra connessione es. MSSQL aggiungerai qualcosa di simile nel tuo model

 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'); //... } } 

è ansible utilizzare in questo modo per molte connessioni dbs come ad esempio la replica di lettura

Hai solo bisogno di aggiungere entrambi i dettagli di connessione al database nel file "application / config / database.php". Assicurati di aver impostato correttamente il field dbdriver per ciascuno, cioè "mysql" e "mssql".

Ho avuto modo di lavorare utilizzando l'impostazione di seguito

Nel file database.php inserisci il seguente. Nota sostituire i segnaposto per nome host, nome utente, password e database per entrambe le configurazioni.

 active_group = 'default'; $query_builder = TRUE; $db['default'] = arrays( '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' => arrays(), 'save_queries' => TRUE ); $db['MSSQL'] = arrays( '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' => arrays(), 'save_queries' => TRUE ); 

La seconda configuration utilizza MSSQL come nome di gruppo e verrà utilizzata per caricare il DB nella class del model sottostante. Ho provato la configuration con less opzioni e non si caricava quindi ho usato tutte le opzioni della configuration di default

Definisci una variabile di class var $mssql e inizializza nel constructor usando $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; } } 

I risultati vengono restituiti come una matrix di oggetti.

Spero che questo aiuti qualcuno