PHP学习_PHP技术_PHP网站建设_PHP程序员专注于PHP技术研究及学习

Adophper » 编程开发 » dede调用远程数据库,dede调用多个数据库

dede调用远程数据库,dede调用多个数据库

此文被围观1966日期: 2013-06-25 分类 : 编程开发  标签:  ·······
用方法 本标签的调用格式为: {dede:sql sql="一条完整的SQL语句" appname="数据库配置参数"} 您的底层模板 {/dede:sql} 稍微有点细心的朋友可能就已经发现了,其实只是在SQL标签中多了一个appname参数,它的意思实际上指的就是您跨数据库调用的连接配置信息; 参数讲解 这个跨数据库调用的连接配置信息是如何配置的呢?请大家打开/include/tablie/sql.lib.php,找到大约65行开始的如: [html] // 引入配置文件 if ($appname != 'default') { require_once(DEDEDATA.'/tag/sql.inc.php'); global $sqltag; $config = $sqltag[$appname]; if (!isset($config['dbname'])) return ''; // 链接数据库 $linkid = @mysql_connect($config['dbhost'], $config['dbuser'], $config['dbpwd']); if(!$linkid) return ''; @mysql_select_db($config['dbname']); $mysqlver = explode('.',$dsql->GetVersion()); $mysqlver = $mysqlver[0].'.'.$mysqlver[1]; // 设定数据库编码及长连接 if($mysqlver > 4.0) { @mysql_query("SET NAMES '".$config['dblanguage']."', character_set_client=binary, sql_mode='', interactive_timeout=3600 ;", $linkid); } $prefix="#@__"; $sql = str_replace($prefix, $config['dbprefix'], $sql); // 校验SQL字符串并获取数组返回 $sql = CheckSql($sql); $rs = @mysql_query($sql, $linkid); while($row = mysql_fetch_array($rs,MYSQL_ASSOC)) { $sqlCt++; $GLOBALS['autoindex']++; // 根据程序判断编码类型,并进行转码,这里主要就是gbk和utf-8 if (substr($cfg_soft_lang, 0, 2) != substr($config['dblanguage'], 0, 2)) { $row = AutoCharset($row, $config['dblanguage'], $cfg_soft_lang); } foreach($ctp->CTags as $tagid=>$ctag) { if($ctag->GetName()=='array') { $ctp->Assign($tagid, $row); } else { if( !empty($row[$ctag->GetName()])) { $ctp->Assign($tagid, $row[$ctag->GetName()]); } else { $ctp->Assign($tagid, ""); } } } $revalue .= $ctp->GetResult(); } @mysql_free_result($rs); } [/html] 上面这段代码的意思就是如果您的SQL标签的appname参数不等于default,那么就加载 DEDEDATA.'/tag/sql.inc.php' 这个配置文件,寻找相关的配置。 而DEDEDATA 是织梦系统的全局常量,代表程序的 /data 文件夹。 固我们可以打开这个文件看一下,您应该能看到如下代码: [html] <?php global $sqltag; // phpwind8数据库连接配置 // ------------------------------------------------------------------------ $sqltag['phpwind8']['dbhost'] = 'localhost'; $sqltag['phpwind8']['dbname'] = 'phpwind8'; $sqltag['phpwind8']['dbuser'] = 'root'; $sqltag['phpwind8']['dbpwd'] = '123456'; $sqltag['phpwind8']['dbprefix'] = 'pw_'; $sqltag['phpwind8']['dblanguage'] = 'gbk'; // phpb2b数据库连接配置 // ------------------------------------------------------------------------ $sqltag['phpb2b']['dbhost'] = 'localhost'; $sqltag['phpb2b']['dbname'] = 'phpb2b'; $sqltag['phpb2b']['dbuser'] = 'root'; $sqltag['phpb2b']['dbpwd'] = '123456'; $sqltag['phpb2b']['dbprefix'] = 'pb_'; $sqltag['phpb2b']['dblanguage'] = 'utf8'; ?> [/html] 其中phpwind8 和 phpb2b 就是跨服务器的配置信息了,您只需要将这里面的连接更改为您自己的即可。甚至还可以进行自定义,比如我们在末尾可以加上如下代码: [html] // discuz数据库连接配置 // ------------------------------------------------------------------------ $sqltag['discuz']['dbhost'] = 'localhost';//数据库服务器地址 $sqltag['discuz']['dbname'] = 'discuz';//数据库名称 $sqltag['discuz']['dbuser'] = 'xuewl_com';//数据库登录用户名 $sqltag['discuz']['dbpwd'] = 'xuewl_com';//数据库登录密码 $sqltag['discuz']['dbprefix'] = 'pre_';//数据库默认表前缀,用于#@__标识 $sqltag['discuz']['dblanguage'] = 'utf8';//数据库的编码 [/html] 保存好文件以后关闭即可。 在前台我们就可以通过如下具体代码调用了: [html] {dede:sql sql="select * from #@__common_member WHERE uid > 1 ORDER BY credits DESC LIMIT 0,8" appname="discuz"} 用户名:[field:username/] {/dede:sql} [/html]

本站使用ThinkPHP框架开发读图网主题,目前托管在阿里云,图片由读图网提供. 蜀ICP备12031064号

Copyright © 2011-2018adophper.com All Rights Reserved.