zoukankan      html  css  js  c++  java
  • 织梦DEDE系统跨站跨数据库调用数据显示

    调用方法

    本标签的调用格式为:

    {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}
  • 相关阅读:
    Maria 与Ann的故事
    引语
    Preface
    Chapter 1 Foundation
    Roman to Integer
    Integer to Roman
    Container with most water
    palindrome number
    String to Integer (atoi)
    Reverse Integer
  • 原文地址:https://www.cnblogs.com/tanlingdangan/p/3679472.html
Copyright © 2011-2022 走看看