public function database($params = '', $return = FALSE, $active_record = NULL)
{
$CI =& get_instance();
if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db)) {
return FALSE;
}
if(file_exists(APPPATH.'core/database/DB.php')) {
require_once(APPPATH.'core/database/DB.php');
} else {
require_once(BASEPATH.'database/DB.php');
}
if ($return === TRUE) {
return DB($params, $active_record);
}
$CI->db = '';
$CI->db =& DB($params, $active_record);
}
/* End of file MY_Loader.php */
/* Location: ./application/core/MY_Loader.php */
//DB_driver.php为所有驱动方式的父类,最终执行查询的方法在该文件中
//第一处修改为判断自定义的DB_driver.php是否存在,存在则引入
if(file_exists(APPPATH.'core/database/DB_driver.php')) {
require_once(APPPATH.'core/database/DB_driver.php');
} else {
require_once(BASEPATH.'database/DB_driver.php');
}
//第二处 $params['dbdriver'].'_driver.php' 该文件可不调整,实际未修改该文件,为了方便调试也加了
//mysql驱动对应system/database/drivers/mysql/mysql_driver.php,mysql的最后执行方法在这里,
//包括数据库打开和关闭、查询等,可以该文件增加相应日志查看读写分离是否有效
if(file_exists(APPPATH.'core/database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php')) {
require_once(APPPATH.'core/database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');
} else {
require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');
}
//将当前group name赋值给param,方便判断
$params['group_name'] = $active_group;
/* End of file DB.php */
/* Location: ./application/core/database/DB.php */
if ($DB->autoinit == TRUE)
{
$DB->initialize();
}
//增加属性,表示当前组
var $active_group;
//增加属性,使用强制使用主库
var $db_force_master;
//该方法为执行查询的必经之地,我们可以在这里根据类型判断使用哪个链接。
function simple_query($sql)
{
//load_db_proxy_setting方法这里写在helper中,也可以直接写在该类中,写在helper中则需要在自动加载中加载该helper
//该方法的作用是根据当前链接group name 和sql读写类型,以及是否强制使用主库判断使用哪个链接。使用主库 OR 重库?
//主重库的负载均衡,单点故障都可以在这里考虑。也就是根据3个参数返回一个可用的配置数组。
$proxy_setting = load_db_proxy_setting($this->group_name, $this->is_write_type($sql), $this->db_force_master);
if(is_array($proxy_setting) && ! empty($proxy_setting)) {
$proxy_setting_key = key($proxy_setting);
$this->group_name = $proxy_setting_key;
//将当前配置重新赋值给类的属性,如果database.php配置的是DSN字符串,则需要在load_db_proxy_setting中做处理
foreach($proxy_setting[$proxy_setting_key] as $key => $val) {
$this->$key = $val;
}
//定义链接ID为conn_前缀
$proxy_conn_id = 'conn_'.$proxy_setting_key;
$CI = & get_instance();
//赋值给CI超级对象或者直接从CI超级对象中读取
if(isset($CI->$proxy_conn_id) && is_resource($CI->$proxy_conn_id)) {
$this->conn_id = $CI->$proxy_conn_id;
} else {
$this->conn_id = false;
$this->initialize();
$CI->$proxy_conn_id = $this->conn_id;
}
//强制只一次有效,下次查询失效,防止一直强制主库
$this->reset_force_master();
}
if ( ! $this->conn_id)
{
$this->initialize();
}
return $this->_execute($sql);
}
//某些情况会强制使用主库,先执行该方法即可
public function force_master()
{
$this->db_force_master = TRUE;
}
public function reset_force_master()
{
$this->db_force_master = FALSE;
}
/* End of file DB_driver.php */
/* Location: ./application/core/database/DB_driver.php */
class MY_Controller extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->service('common/helper_service', NULL, 'helper');
//下面这段为关闭CI超级对象中的数据库对象和数据库链接,db的对象Codeigniter.php中会关闭
register_shutdown_function(function(){
foreach(get_object_vars($this) as $key => $val) {
if(substr($key, 0, 3) == 'db_' && is_object($this->{$key}) && method_exists($this->{$key}, 'close')) {
$this->{$key}->close();
}
if(substr($key, 0, 5) == 'conn_' && is_resource($this->{$key})) {
$this->db->_close($val);
unset($this->{$key});
}
}
});
}
}
/* End of file MY_Controller.php */
/* Location: ./application/core/MY_Controller.php */
public function __construct($group_name = '')
{
parent::__construct();
$this->initDb($group_name);
}
private function initDb($group_name = '')
{
$db_conn_name = $this->getDbName($group_name);
$CI = & get_instance();
if(isset($CI->{$db_conn_name}) && is_object($CI->{$db_conn_name})) {
$this->db = $CI->{$db_conn_name};
} else {
$CI->{$db_conn_name} = $this->db = $this->load->database($group_name, TRUE);
}
}
private function getDbName($group_name = '')
{
if($group_name == '') {
$db_conn_name = 'db';
} else {
$db_conn_name = 'db_'.$group_name;
}
return $db_conn_name;
}
/* End of file MY_Model.php */
/* Location: ./application/core/MY_Model.php */
$_master_slave_relation = array(
'default_master' => array('default_slave1', 'default_slave2', 'default_slave3'),
);
/* End of file database.php */
/* Location: ./application/config/database.php */
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有