调用方法
本标签的调用格式为:
{dede:sql sql="一条完整的SQL语句" appname="数据库配置参数"}
您的底层模板
{/dede:sql}
稍微有点细心的朋友可能就已经发现了,其实只是在SQL标签中多了一个appname参数,它的意思实际上指的就是您跨数据库调用的连接配置信息;
参数讲解
这个跨数据库调用的连接配置信息是如何配置的呢?请大家打开/include/tablie/sql.lib.php,找到大约65行开始的如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
// 引入配置文件
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 ) ; } |
上面这段代码的意思就是如果您的SQL标签的appname参数不等于default,那么就加载 DEDEDATA.'/tag/sql.inc.php' 这个配置文件,寻找相关的配置。
而DEDEDATA 是织梦系统的全局常量,代表程序的 /data 文件夹。
固我们可以打开这个文件看一下,您应该能看到如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?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' ; ?> |
其中phpwind8 和 phpb2b 就是跨服务器的配置信息了,您只需要将这里面的连接更改为您自己的即可。甚至还可以进行自定义,比如我们在末尾可以加上如下代码:
1 2 3 4 5 6 7 8 |
// 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' ; //数据库的编码 |
保存好文件以后关闭即可。
雨田SEOER在前台我们就可以通过如下具体代码调用了:
1 2 3 |
{dede:sql sql="select * from #@__common_member WHERE uid > 1 ORDER BY credits DESC LIMIT 0,8" appname="discuz"}
用户名:[field:username/] {/dede:sql} |