欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

dedecms 连接两个数据库 二个数据库 自己亲自做的 有大用

(做了本文的下面的八项改动之后 )我发现有一个重大问题 自己不知如何解决
1)如果使用了 mysql 
则在使用 执行第二个数据库之后 (使用了 $dsql2执行了或增或删或改或查之后 )再执行第一个数据库
(使用了 $dsql执行了或增或删或改或查 ),那么仍然是从第二个数据库执行存取数据的 这个是什么原因 ,暂时没弄清楚

好像先执行第一个数据库,再执行第二个数据库,也是出现同样的情况
(具体指第一次执行的时候两个可以,但第三个(第四个,第五个.....)执行时 就会按照第二个执行的数据库来,也许是因为mysql是面向过程的吧,具体原因不太懂)
(
但是我们如果连一次数据库(打开一次数据库),再关闭之,然后再连另一个数据库
(打开另一个数据库),再关闭之,,就可以了)
例如

$dsql2 = $db2 = new DedeSql2(FALSE);
$row2 = $dsql2->GetOne("Select * From `#@__homepageset`");
var_dump($row2);
$dsql2->Close(true);

$dsql = $db = new DedeSql(FALSE);
$row = $dsql->GetOne("Select * From `#@__homepageset`");
var_dump($row);
$dsql->Close(true);

$dsql2 = $db2 = new DedeSql2(FALSE);
$row2 = $dsql2->GetOne("Select * From `#@__homepageset`");
var_dump($row2);
$dsql2->Close(true);


$dsql = $db = new DedeSql(FALSE);
$row = $dsql->GetOne("Select * From `#@__homepageset`");
var_dump($row);
$dsql->Close(true);

var_dump($dsql);
var_dump($dsql2);






2)如果使用了 mysqli 是正确的是正常的,也许是因为mysqli既有面向过程的功能,又有面向对象的功能吧

系统设置=>核心设置 里面





下面是八项改动

1)在 data/common.inc.php 中 写如下的两个数据库连接代码

<?php
//数据库连接信息
$cfg_dbhost = 'localhost';
$cfg_dbname = 'www.4006055610.com';
$cfg_dbuser = 'root';
$cfg_dbpwd = '';
$cfg_dbprefix = 'dede_';
$cfg_db_language = 'utf8';

$cfg2_dbhost = 'localhost';
$cfg2_dbname = 'm.4006055610.com';
$cfg2_dbuser = 'root';
$cfg2_dbpwd = '';
$cfg2_dbprefix = 'dede_';
$cfg2_db_language = 'utf8';
?>

2)根据 include/dedesql.class.php  include/dedesqli.class.php
复制一下 文件名为(当然可以自己定文件名)
dedesql2.class.php  dedesqli2.class.php
在这两个文件里 把 数据库的配置(关于$cfg_的配置) 改为($cfg2_)

3)include/common.inc.php 的 约 297行及之后的几行
改为
//引入数据库类
if ($GLOBALS['cfg_mysql_type'] == 'mysqli' && function_exists("mysqli_init"))
{
    require_once(DEDEINC.'/dedesqli.class.php');
    require_once(DEDEINC.'/dedesqli2.class.php');
} else {
    require_once(DEDEINC.'/dedesql.class.php');
    require_once(DEDEINC.'/dedesql2.class.php');
}

4)在  include/dedesql2.class.php 约21行
改为 

$dsql2 = $db2 = new DedeSql2(FALSE);

约29行改为

class DedeSql2

还有把这个文件的其它的所有的dedesql 改成 dedesql2
还有把这个文件的所有的dsql 替换成 dsql2
5)在  include/dedesqli2.class.php 约21行
改为

$dsql2 = $dsqli2 = $db2 = new DedeSqli2(FALSE);

约29行改为
class DedeSqli2

还有把这个文件的其它的所有的dedesqli 改成 dedesqli2
还有把这个文件的所有的dsqli 替换成 dsqli2


6) include/dedesql2.class.php 下面的内容 约 609行


//复制一个对象副本 
function CopySQLPoint(&$ndsql)
{  
   $GLOBALS['dsql'] = $ndsql; 
}

变成下面的 也就是 
CopySQLPoint变成 CopySQLPoint2


dsql 变成 dsql2


//复制一个对象副本
function CopySQLPoint2(&$ndsql)
{
    $GLOBALS['dsql2'] = $ndsql;
}

把这个文件的CopySQLPoint 改所在CopySQLPoint2 (其实总共两处)


7) include/dedesqli2.class.php 注释掉下面的内容 约 609行


//复制一个对象副本
function CopySQLiPoint(&$ndsql)
{
  $GLOBALS['dsql'] = $ndsql;


}

变成下面的 也就是 


CopySQLiPoint变成 CopySQLiPoint2 


dsqli 变成 dsqli2

//复制一个对象副本 function CopySQLiPoint2(&$ndsql)
{
    $GLOBALS['
dsqli2'] = $ndsql; 
}

把这个文件的CopySQLiPoint 改所在CopySQLiPoint2 (其实总共两处)


8)最后检查下 有没有替换重复的 sql 





普通分类: