“Discuz!X/多数据库配置与使用方法”的版本间的差异
来自Blueidea
< Discuz!X
小 (→一些额外的修改) |
小 |
||
(未显示同一用户的2个中间版本) | |||
第8行: | 第8行: | ||
在/config/config_global.php 文件中增加数据表和服务器之间的映射关系,还有相应数据库服务器配置。加入以下代码 | 在/config/config_global.php 文件中增加数据表和服务器之间的映射关系,还有相应数据库服务器配置。加入以下代码 | ||
− | < | + | <syntaxhighlight lang="php"> |
//2的意思是随后配置的数据库连接参数 | //2的意思是随后配置的数据库连接参数 | ||
$_config['db']['map']=array('表名'=>'2'); | $_config['db']['map']=array('表名'=>'2'); | ||
第21行: | 第21行: | ||
//这个参数其实没有用,要照我随后的修改就可以用了 | //这个参数其实没有用,要照我随后的修改就可以用了 | ||
$_config['db']['2']['tablepre'] = 'cdb_'; | $_config['db']['2']['tablepre'] = 'cdb_'; | ||
− | </ | + | </syntaxhighlight> |
第34行: | 第34行: | ||
#一些联表查询不能使用 | #一些联表查询不能使用 | ||
#外联数据库的表前缀一定得和现在的表前缀一样。如 pre_表名 | #外联数据库的表前缀一定得和现在的表前缀一样。如 pre_表名 | ||
+ | #'''当打开 debug 参数时,会提示表不存在,所以此时应关闭DEBUG''' | ||
== 一些额外的修改 == | == 一些额外的修改 == | ||
− | 如果需要使用其它数据库的非Discuz的表,可以修改 class_core 的 table_name 函数,这样就不用限制 pre_ 表前缀了。而且配置中的数据库前缀也可以用了。 | + | 如果需要使用其它数据库的非Discuz的表,可以修改 class_core(1.5),db_driver_mysql(2.5) 的 table_name 函数,这样就不用限制 pre_ 表前缀了。而且配置中的数据库前缀也可以用了。 |
<syntaxhighlight lang="php" line="GESHI_NORMAL_LINE_NUMBERS" highlight="9"> | <syntaxhighlight lang="php" line="GESHI_NORMAL_LINE_NUMBERS" highlight="9"> |
2013-01-25T02:05:33的最后版本
在Discuz!x中,是可以方便的使用多数据库的,可以单独的配置不同的数据库连接。作用估计起来有以下两个好处。
- 如果负载足够搞,是可以把很一些表分布在多台数据库服务器中。这样来减小负载
- 可以方便的使用别的数据库中的数据。
- 还可以把帖子分表,分到不同的数据库服务器中 将帖子拆分到其他数据库
配置方法
在/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;
}