跨數據庫調用

include/taglib/sql.lib.phpphp

<?php
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
/**
* SQL標籤
*
* @version $Id: sql.lib.php 2 10:00 2010-11-11 tianya $
* @package DedeCMS.Taglib
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/html

/*>>dede>>
<name>SQL標籤</name>
<type>全局標記</type>
<for>V55,V56,V57</for>
<description>用於獲取MySQL數據庫內容的標籤</description>
<demo>
{dede:sql sql='' db='default'}
[field:title/]
{/dede}
</demo>
<attributes>
<iterm>sql:須要查詢的sql語句</iterm>
<iterm>appname: 默認爲default,即當前dedecms的數據庫,若是須要自定義,能夠在data/tag/sql.inc.php中擴展,具體擴展方法查看配置文件頭部說明</iterm>
</attributes>
>>dede>>*/mysql

function lib_sql(&$ctag,&$refObj)
{
global $dsql,$sqlCt,$cfg_soft_lang;
$attlist="sql|appname";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);sql

//傳遞環境參數
preg_match_all("/~([A-Za-z0-9]+)~/s", $sql, $conditions);
$appname = empty($appname)? 'default' : $appname;
if(is_array($conditions))
{
foreach ($conditions[1] as $key => $value)
{
if(isset($refObj->Fields[$value]))
{
$sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql);
}
}
}

$revalue = '';
$Innertext = trim($ctag->GetInnerText());數據庫

if($sql=='' || $Innertext=='') return '';
if(empty($sqlCt)) $sqlCt = 0;數組

$ctp = new DedeTagParse();
$ctp->SetNameSpace('field','[',']');
$ctp->LoadSource($Innertext);
$thisrs = 'sq'.$sqlCt;
$GLOBALS['autoindex'] = 0;

// 引入配置文件
if ($appname != 'default')
{
require_once(DEDEDATA.'/tag/sql.inc.php');
global $sqltag;
$config = $sqltag[$appname];
if (!isset($config['dbname'])) return '';app

// 連接數據庫
$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];ide

// 設定數據庫編碼及長鏈接
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);fetch

// 校驗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);

} else {
$dsql->Execute($thisrs, $sql);
while($row = $dsql->GetArray($thisrs))
{
$sqlCt++;
$GLOBALS['autoindex']++;
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();
}
}
return $revalue;
}

 

 

 

 

data/tag/sql.inc.php

<?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['lixincma_lsm1']['dbhost'] = 'localhost';  //'數據庫IP'
$sqltag['lixincma_lsm1']['dbname'] = 'lixincma_lsm1';  //'數據庫名稱';
$sqltag['lixincma_lsm1']['dbuser'] = 'lixincma_lsm1';  //'數據庫用戶名'
$sqltag['lixincma_lsm1']['dbpwd'] = 'lsm1lsm1';  // '數據庫密碼'
$sqltag['lixincma_lsm1']['dbprefix'] = 'dede_';  //'數據庫表前綴,默許的爲dede_'
$sqltag['lixincma_lsm1']['dblanguage'] = 'utf8';  // '編碼格局,如utf八、gb2312'
?>

 

在wwwlixinedu.cn中模板-》全局標記測試中測試:(lixincma_lsm3)

{dede:sql sql="SELECT * FROM `dede_admin`" appname="lixincma_lsm1"}
[field:uname/]
{/dede:sql}

測試結果:

這兩個用戶名是在另一個站點lixinabe.com(lixincma_lsm1)的不一樣數據庫中設置的:

相關文章
相關標籤/搜索