从Codeigniter中的其他DB切换动态数据库 [英] Switch dynamic database from other DB in Codeigniter
问题描述
mi file config.php is:
$ active_group ='default';
$ active_record = TRUE;
db master是唯一的DB
$ db ['master'] ['hostname'] =localhost;
$ db ['master'] ['username'] =root;
$ db ['master'] ['password'] =;
$ db ['master'] ['database'] =admin_nb;
$ db ['master'] ['dbdriver'] =mysqli;
$ db ['master'] ['dbprefix'] ='';
$ db ['master'] ['pconnect'] = FALSE;
$ db ['master'] ['db_debug'] = TRUE;
$ db ['master'] ['cache_on'] = FALSE;
$ db ['master'] ['cachedir'] =;
$ db ['master'] ['char_set'] =utf8;
$ db ['master'] ['dbcollat'] =utf8_general_ci;
db应用程式为DYNAMIC DB
$ db ['app'] ['hostname'] ='localhost';
$ db ['app'] ['username'] ='root';
$ db ['app'] ['password'] ='';
$ db ['app'] ['database'] = $ my_bd_dynamic;
$ db ['app'] ['dbdriver'] ='mysqli';
$ db ['app'] ['dbprefix'] ='';
$ db ['app'] ['pconnect'] = TRUE;
$ db ['app'] ['db_debug'] = TRUE;
$ db ['app'] ['cache_on'] = FALSE;
$ db ['app'] ['cachedir'] ='';
$ db ['app'] ['char_set'] ='utf8';
$ db ['app'] ['dbcollat'] ='utf8_general_ci';
$ db ['app'] ['swap_pre'] ='';
$ db ['app'] ['autoinit'] = TRUE;
$ db ['app'] ['stricton'] = FALSE;
根据master数据库中的登录信息,我得到数据库的名称,变量
$ My_bd_dynamic的值
bd_dynamic's无法手动写入,因为许多数据库
我在我的控制器测试这个:
class Trabajador extends CI_Controller {
pre>
public function __construct b $ b {
parent :: __ construct();
$ this-> load-> driver('cache');
$ this-> load-> helper(array('form','url','otros_helper','fechas_helper','imagen_helper'));
// Se le asigna a la informacion a la variable $ user。
$ this-> abbost_hotel = @ $ this-> session-> userdata('sess_abbost_hotel _'。substr(base_url(), - 8,7));
$ my_bd_dynamic = $ this-> abbost_hotel-> nombre_bd; / * var session * /
$ config_app ['hostname'] ='localhost';
$ config_app ['username'] ='root';
$ config_app ['password'] ='';
$ config_app ['database'] = $ my_bd_dynamic;
$ config_app ['dbdriver'] ='mysqli';
$ config_app ['dbprefix'] ='';
$ config_app ['pconnect'] = FALSE;
$ config_app ['db_debug'] = TRUE;
$ this-> load-> model('model_tareas','',$ config_app);
}
public function index()
{
// ...
}
而且,我的Model_tarea是:
...public function m_cargar_tareas_activas()
{
$ estado = 1;
$ this-> db-> select(colum1,colum2);
$ this-> db-> from('tarea');
$ query = $ this-> db-> get();
return $ query-> result_array();
}
...
但是,读取数据库主数据库而不读取数据库$ my_bd_dynamic。
帮助请,
没有办法以这种方式操作?$ this-> set - > database = $ my_dinamic_bd;
我必须更改codeigniter的核心部分以解决问题吗?
解决方案谢谢,thiagobraga。
但... ...public function m_cargar_tareas_activas($ group_name)
{
.. 。
它的参数$ group_name,必须去所有我的方法
我的解决方案是:
database.php
$ active_group ='master';
$ active_record = TRUE;
$ db ['master'] ['hostname'] =localhost;
$ db ['master'] ['username'] =root;
$ db ['master'] ['password'] =;
$ db ['master'] ['database'] =admin_nb;
$ db ['master'] ['dbdriver'] =mysqli;
$ db ['master'] ['dbprefix'] ='';
$ db ['master'] ['pconnect'] = FALSE;
$ db ['master'] ['db_debug'] = TRUE;
$ db ['master'] ['cache_on'] = FALSE;
$ db ['master'] ['cachedir'] =;
$ db ['master'] ['char_set'] =utf8;
$ db ['master'] ['dbcollat'] =utf8_general_ci;
我的新文件帮助器:
strong> db_dinamic_helper
<?php if(!defined('BASEPATH'))exit允许脚本访问);
function switch_db_dinamico($ name_db)
{
$ config_app ['hostname'] ='localhost';
$ config_app ['username'] ='root';
$ config_app ['password'] ='';
$ config_app ['database'] = $ name_db;
$ config_app ['dbdriver'] ='mysqli';
$ config_app ['dbprefix'] ='';
$ config_app ['pconnect'] = FALSE;
$ config_app ['db_debug'] = TRUE;
return $ config_app;
}
trabajador.php
$ b<?php if(!defined('BASEPATH'))exit('不允许直接脚本访问);
class Trabajador extends CI_Controller {
public function __construct()
{
parent :: __ construct();
$ this-> load-> driver('cache');
$ this-> load-> helper(array('form','url','otros_helper','fechas_helper','imagen_helper','config_helper','permisos_helper'));
$ this-> abbost_hotel = @ $ this-> session-> userdata('sess_abbost_hotel _'。substr(base_url(), - 8,7));
if(!@ $ this-> abbost_hotel-> usuario_id)redirect('acceso');
$ nombre_bd = $ this-> abbost_hotel-> nombre_bd;
$ config_app = switch_db_dinamico($ nombre_bd);
$ this-> load-> model(array('model_producto','model_trabajadores','model_habitacion','model_tareas','model_notif'))
$ this-> model_trabajadores-> app_db = $ this-> load-> database($ config_app,TRUE);
$ this-> model_habitacion-> app_db = $ this-> load-> database($ config_app,TRUE);
$ this-> model_producto-> app_db = $ this-> load-> database($ config_app,TRUE);
$ this-> model_tareas-> app_db = $ this-> load-> database($ config_app,TRUE);
$ this-> model_notif-> app_db = $ this-> load-> database($ config_app,TRUE);
date_default_timezone_set(America / Lima);
// if(!@ $ this-> user)redirect('inicio / login');
// $ permisos = cargar_permisos_del_usuario($ this-> user-> idusuario);
}
public function index()
{
// ...
}
...我的模型:
model_tareas.php
$ b<?php
class Model_tareas extends CI_Model {
public $ app_db;
public function __construct()
{
parent :: __ construct();
}
public function m_cargar_tareas_activas()
{
$ estado = 1;
$ this-> app_db-> select(tarea_id,prioridad);
$ this-> app_db-> from('tarea');
$ query = $ this-> app_db-> get();
return $ query-> result_array();
}
重要
文件自动加载中的文件db_dinamic_helper.php初始化。 php
Thanks..¡¡):mi file config.php is:
$active_group = 'default'; $active_record = TRUE;
db master is unique DB
$db['master']['hostname'] = "localhost"; $db['master']['username'] = "root"; $db['master']['password'] = ""; $db['master']['database'] = "admin_nb"; $db['master']['dbdriver'] = "mysqli"; $db['master']['dbprefix'] = ''; $db['master']['pconnect'] = FALSE; $db['master']['db_debug'] = TRUE; $db['master']['cache_on'] = FALSE; $db['master']['cachedir'] = ""; $db['master']['char_set'] = "utf8"; $db['master']['dbcollat'] = "utf8_general_ci";
db app is DYNAMIC DB
$db['app']['hostname'] = 'localhost'; $db['app']['username'] = 'root'; $db['app']['password'] = ''; $db['app']['database'] = $my_bd_dynamic; $db['app']['dbdriver'] = 'mysqli'; $db['app']['dbprefix'] = ''; $db['app']['pconnect'] = TRUE; $db['app']['db_debug'] = TRUE; $db['app']['cache_on'] = FALSE; $db['app']['cachedir'] = ''; $db['app']['char_set'] = 'utf8'; $db['app']['dbcollat'] = 'utf8_general_ci'; $db['app']['swap_pre'] = ''; $db['app']['autoinit'] = TRUE; $db['app']['stricton'] = FALSE;
According to a login in the master database, I get the name of the database and I have to assign the value to the variable $ My_bd_dynamic
The "bd_dynamic's" can not write it manually because many databases
I was testing this in my controller:
class Trabajador extends CI_Controller { public function __construct() { parent::__construct(); $this->load->driver('cache'); $this->load->helper(array('form', 'url','otros_helper','fechas_helper','imagen_helper')); // Se le asigna a la informacion a la variable $user. $this->abbost_hotel = @$this->session->userdata('sess_abbost_hotel_'.substr(base_url(),-8,7)); $my_bd_dynamic= $this->abbost_hotel->nombre_bd; /*var session*/ $config_app['hostname'] = 'localhost'; $config_app['username'] = 'root'; $config_app['password'] = ''; $config_app['database'] = $my_bd_dynamic; $config_app['dbdriver'] = 'mysqli'; $config_app['dbprefix'] = ''; $config_app['pconnect'] = FALSE; $config_app['db_debug'] = TRUE; $this->load->model('model_tareas','',$config_app); } public function index() { //... }
And, my Model_tarea is: ...
public function m_cargar_tareas_activas() { $estado = 1; $this->db->select("colum1,colum2"); $this->db->from('tarea'); $query = $this->db->get(); return $query->result_array(); }
... But, read database master and not read database $my_bd_dynamic. Help Please, There is no way to manipulate this way?
$this->set->database = $my_dinamic_bd;
What part of the core of codeigniter I have to change to fix the problem?
解决方案Thanks, thiagobraga. But...
public function m_cargar_tareas_activas($group_name) { ...
its parameter $group_name, would have to go for all my methods My solution is:
database.php
$active_group = 'master'; $active_record = TRUE; $db['master']['hostname'] = "localhost"; $db['master']['username'] = "root"; $db['master']['password'] = ""; $db['master']['database'] = "admin_nb"; $db['master']['dbdriver'] = "mysqli"; $db['master']['dbprefix'] = ''; $db['master']['pconnect'] = FALSE; $db['master']['db_debug'] = TRUE; $db['master']['cache_on'] = FALSE; $db['master']['cachedir'] = ""; $db['master']['char_set'] = "utf8"; $db['master']['dbcollat'] = "utf8_general_ci";
My new file helper:
db_dinamic_helper
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); function switch_db_dinamico($name_db) { $config_app['hostname'] = 'localhost'; $config_app['username'] = 'root'; $config_app['password'] = ''; $config_app['database'] = $name_db; $config_app['dbdriver'] = 'mysqli'; $config_app['dbprefix'] = ''; $config_app['pconnect'] = FALSE; $config_app['db_debug'] = TRUE; return $config_app; }
trabajador.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Trabajador extends CI_Controller { public function __construct() { parent::__construct(); $this->load->driver('cache'); $this->load->helper(array('form', 'url','otros_helper','fechas_helper','imagen_helper','config_helper','permisos_helper')); $this->abbost_hotel = @$this->session->userdata('sess_abbost_hotel_'.substr(base_url(),-8,7)); if(!@$this->abbost_hotel->usuario_id) redirect ('acceso'); $nombre_bd = $this->abbost_hotel->nombre_bd; $config_app = switch_db_dinamico($nombre_bd); $this->load->model(array('model_producto','model_trabajadores','model_habitacion','model_tareas','model_notif')); $this->model_trabajadores->app_db = $this->load->database($config_app,TRUE); $this->model_habitacion->app_db = $this->load->database($config_app,TRUE); $this->model_producto->app_db = $this->load->database($config_app,TRUE); $this->model_tareas->app_db = $this->load->database($config_app,TRUE); $this->model_notif->app_db = $this->load->database($config_app,TRUE); date_default_timezone_set("America/Lima"); //if(!@$this->user) redirect ('inicio/login'); //$permisos = cargar_permisos_del_usuario($this->user->idusuario); } public function index() { //... }
...And my model:
model_tareas.php
<?php class Model_tareas extends CI_Model { public $app_db; public function __construct() { parent::__construct(); } public function m_cargar_tareas_activas() { $estado = 1; $this->app_db->select("tarea_id, prioridad"); $this->app_db->from('tarea'); $query = $this->app_db->get(); return $query->result_array(); }
IMPORTANT¡ The file db_dinamic_helper.php initialize in file autoload.php Thanks..¡¡ :)
这篇关于从Codeigniter中的其他DB切换动态数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!