当前位置 : 主页 > 网络编程 > PHP >

Discuz!X/多数据库配置与使用方法

来源:互联网 收集:自由互联 发布时间:2021-06-28
多数据库配置与使用方法 配置方法在/config/config_global.php 文件中增加数据表和服务器之间的映射关系,还有相应数据库服务器配置。加入以下代码 //2的意思是随后配置的数据库连接参数
多数据库配置与使用方法
配置方法
在/config/config_global.php 文件中增加数据表和服务器之间的映射关系,还有相应数据库服务器配置。加入以下代码

 //2的意思是随后配置的数据库连接参数
$_config['db']['map']=array('表名'=>'2');
 
//这里面2对应映射配置
$_config['db']['2']['dbhost'] = 'localhost';
$_config['db']['2']['dbuser'] = 'root';
$_config['db']['2']['dbpw'] = '';
$_config['db']['2']['dbcharset'] = 'gbk';
$_config['db']['2']['pconnect'] = '0';
$_config['db']['2']['dbname'] = '数据库名';
//这个参数其实没有用,要照我随后的修改就可以用了
$_config['db']['2']['tablepre'] = 'cdb_';

使用方法
在程序中使用就很方便了。直接使用DB静态对象

print_r(DB::fetch_first("SELECT * FROM ".DB::table('表名')." limit 1"));

注意事项
一定要使用DB::table方法,因为通过这个方法来转换数据库连接。
一些联表查询不能使用
外联数据库的表前缀一定得和现在的表前缀一样。如 pre_表名
当打开 debug 参数时,会提示表不存在,所以此时应关闭DEBUG

一些额外的修改
如果需要使用其它数据库的非Discuz的表,可以修改 class_core(1.5),db_driver_mysql(2.5) 的 table_name 函数,这样就不用限制 pre_ 表前缀了。而且配置中的数据库前缀也可以用了。

function table_name($tablename) {
	if(!empty($this->map) && !empty($this->map[$tablename])) {
		$id = $this->map[$tablename];
		if(!$this->link[$id]) {
			$this->connect($id);
		}
		$this->curlink = $this->link[$id];
		//增加了这一句
		return $this->config[$id]['tablepre'].$tablename;
	} else {
		$this->curlink = $this->link[1];
	}
 
	return $this->tablepre.$tablename;
}

http://wiki.blueidea.com/index.php?title=Discuz!X/%E5%A4%9A%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE%E4%B8%8E%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
网友评论