帝国CMS的多数据库配置

项目场景:

在一个帝国CMS项目中操作多个数据库


设置方法

  1. 修改e/config/config.php文件内容
//系统自带默认数据库设置
$ecms_config['db']['usedb']='mysqli';	//数据库类型
$ecms_config['db']['dbver']='5.0';	//数据库版本
$ecms_config['db']['dbserver']='localhost';	//数据库登录地址
$ecms_config['db']['dbport']='';	//端口,不填为按默认
$ecms_config['db']['dbusername']='root';	//数据库用户名
$ecms_config['db']['dbpassword']='root';	//数据库密码
$ecms_config['db']['dbname']='empirecms';	//数据库名
$ecms_config['db']['setchar']='utf8';	//设置默认编码
$ecms_config['db']['dbchar']='utf8';	//数据库默认编码
$ecms_config['db']['dbtbpre']='abc_';	//数据表前缀
$dbtbpre=$ecms_config['db']['dbtbpre'];	//数据表前缀
$ecms_config['db']['showerror']=1;	//显示SQL错误提示(0为不显示,1为显示)

//新增设置第二个数据库,多数据库以此类推
$ecms_config['db']['dbserver2']='127.0.0.1';	//数据库登录地址,和第一个数据库相同则可不设置
$ecms_config['db']['dbport2']='3306';	//端口,不填为按默认,和第一个数据库相同则可不设置
$ecms_config['db']['dbusername2']='example';	//数据库用户名
$ecms_config['db']['dbpassword2']='t8NLPYeFtJbcr8Hz';	//会员中心数据库密码
$ecms_config['db']['dbname2']='example';	//数据库名
$ecms_config['db']['dbtbpre2']='abc_';	//数据表前缀,没有前缀可不设置
$dbtbpre2=$ecms_config['db']['dbtbpre2'];	//数据表前缀,没有前缀可不设置

  1. 修改e/class/connect.php文件内容,仿照系统自带方法新增
//--------------- 数据库 ---------------
//系统自带方法连接默认数据库
function db_connect(){
	global $ecms_config;
	$dblink=do_dbconnect($ecms_config['db']['dbserver'],$ecms_config['db']['dbport'],$ecms_config['db']['dbusername'],$ecms_config['db']['dbpassword'],$ecms_config['db']['dbname']);
	return $dblink;
}

//连接第二数据库
function db_connect2(){
    global $ecms_config;
    $dblink2=do_dbconnect($ecms_config['db']['dbserver2'],$ecms_config['db']['dbport2'],$ecms_config['db']['dbusername2'],$ecms_config['db']['dbpassword2'],$ecms_config['db']['dbname2']);
	return $dblink2;
}
//系统自带返回连接数据库
function return_dblink($query){
	$dblink=$GLOBALS['link'];
	return $dblink;
}
//返回连接第二数据库
function return_dblink2($query){
    $dblink2=$GLOBALS['dblink2'];
    return $dblink2;
}

  1. 修改e/class/db/db_mysqli.php文件内容,仿照系统自带方法新增
//------------------------- 数据库操作 -------------------------
//复制系统自带的mysqlquery类,新增第二个数据库查询类,修改类中相关变量,具体为:
//$dblink修改为$dblink2
//return_dblink修改为return_dblink2
//dbtbpre修改为dbtbpre2,config里这个参数没修改的这里可不用改
//$GLOBALS['link']修改为 $GLOBALS['link2']
class mysqlquery2
{
	var $dblink;
	var $sql;//sql语句执行结果
	var $query;//sql语句
	var $num;//返回记录数
	var $r;//返回数组
	var $id;//返回数据库id号
	//执行mysql_query()语句
	function query($query){
		global $ecms_config;
		$this->sql=mysqli_query(return_dblink($query),$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error(return_dblink($query)).'<br>'.$query):'DbError');
		return $this->sql;
	}
	//执行mysql_query()语句2
	function query1($query){
		$this->sql=mysqli_query(return_dblink($query),$query);
		return $this->sql;
	}
	//执行mysql_query()语句(选择数据库USE)
	function usequery($query){
		global $ecms_config;
		$this->sql=mysqli_query($GLOBALS['link'],$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error($GLOBALS['link']).'<br>'.$query):'DbError');
		if($GLOBALS['linkrd'])
		{
			mysqli_query($GLOBALS['linkrd'],$query);
		}
		return $this->sql;
	}
	//执行mysql_query()语句(操作数据库)
	function updatesql($query){
		global $ecms_config;
		$this->sql=mysqli_query(return_dblink($query),$query) or die($ecms_config['db']['showerror']==1?str_replace($GLOBALS['dbtbpre'],'***_',mysqli_error(return_dblink($query)).'<br>'.$query):'DbError');
		return $this->sql;
	}
	//执行mysql_fetch_array()
	function fetch($sql)//此方法的参数是$sql就是sql语句执行结果
	{
		$this->r=mysqli_fetch_array($sql);
		return $this->r;
	}
	//执行fetchone(mysql_fetch_array())
	//此方法与fetch()的区别是:1、此方法的参数是$query就是sql语句 
	//2、此方法用于while(),for()数据库指针不会自动下移,而fetch()可以自动下移。
	function fetch1($query)
	{
		$this->sql=$this->query($query);
		$this->r=mysqli_fetch_array($this->sql);
		return $this->r;
	}
	//执行mysql_num_rows()
	function num($query)//此类的参数是$query就是sql语句
	{
		$this->sql=$this->query($query);
		$this->num=mysqli_num_rows($this->sql);
		return $this->num;
	}
	//执行numone(mysql_num_rows())
	//此方法与num()的区别是:1、此方法的参数是$sql就是sql语句的执行结果。
	function num1($sql)
	{
		$this->num=mysqli_num_rows($sql);
		return $this->num;
	}
	//执行numone(mysql_num_rows())
	//统计记录数
	function gettotal($query)
	{
		$this->r=$this->fetch1($query);
		return $this->r['total'];
	}
	//执行free(mysql_result_free())
	//此方法的参数是$sql就是sql语句的执行结果。只有在用到mysql_fetch_array的情况下用
	function free($sql)
	{
		mysqli_free_result($sql);
	}
	//执行seek(mysql_data_seek())
	//此方法的参数是$sql就是sql语句的执行结果,$pit为执行指针的偏移数
	function seek($sql,$pit)
	{
		mysqli_data_seek($sql,$pit);
	}
	//执行id(mysql_insert_id())
	function lastid()//取得最后一次执行mysql数据库id号
	{
		$this->id=mysqli_insert_id($GLOBALS['link']);
		if($this->id<0)
		{
			$this->id=$this->gettotal('SELECT last_insert_id() as total');
		}
		return $this->id;
	}
	//返回影响数量(mysql_affected_rows())
	function affectnum()//取得操作数据表后受影响的记录数
	{
		return mysqli_affected_rows($GLOBALS['link']);
	}
	//执行escape_string()函数
	function EDbEscapeStr($str){
		$str=mysqli_real_escape_string($GLOBALS['link'],$str);
		return $str;
	}
	//取得数据库版本
	function egetdbver()
	{
		$this->r=$this->fetch1('select version() as version');
		return $this->r['version'];
	}
}

  1. 使用方法,同系统原生,如下
require("../../class/connect.php");
include("../../class/db_sql.php");
//系统自带的使用方法简单示例如下
$link = db_connect();
$empire=new mysqlquery();
$r=$empire->fetch1("SELECT id, username, newspath FROM pc_ecms_news");
//第二数据库的增删改查简单示例如下
$link2 = db_connect2();//注意连接的是第二数据库
$example=new mysqlquery2();//注意实例化的是第二数据库的查询类
$r=$example->fetch1("select id, username from tablename");
//$example->query("insert into tablename (id, username, password) values (1,'admin',123456);");
//$example->query("update tablename set username = 'admin2' where id = 1;");
//$example->query("delete from tablename where id = 1;");

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值