一个DEDE下载页面的函数,动态显示所有一级栏目名
//以下为获取栏目列表,By 尘缘
$dsql = new DedeSql(false);
$menuquerysql = "Select typedir,typename from `#@__arctype` where reid='0'";
$dsql->Execute('me',$menuquerysql);
while($row = $dsql->getarray())
{
$menus= $menus."
}
$dsql->Close();
将以上代码加到plus/download.php中,位置任意,在模板中调用< ?=menus?>即可.
这里主要是分析了DEDE的Mysql函数,感觉好用。
记号一下。
//
//用指定参数初始数据库信息
//
function SetSource($host,$username,$pwd,$dbname,$dbprefix="dede_")
{
$this->dbHost = $host;
$this->dbUser = $username;
$this->dbPwd = $pwd;
$this->dbName = $dbname;
$this->dbPrefix = $dbprefix;
$this->result["me"] = 0;
}
function SelectDB($dbname)
{
mysql_select_db($dbname);
}
//
//设置SQL里的参数
//
function SetParameter($key,$value){
$this->parameters[$key]=$value;
}
//
//连接数据库
//
function Open($pconnect=false)
{
global $dsql;
//连接数据库
if($dsql && !$dsql->isClose) $this->linkID = $dsql->linkID;
else
{
if(!$pconnect){ $this->linkID = @mysql_connect($this->dbHost,$this->dbUser,$this->dbPwd); }
else{ $this->linkID = @mysql_pconnect($this->dbHost,$this->dbUser,$this->dbPwd); }
//复制一个对象副本
CopySQLPoint($this);
}
//处理错误,成功连接则选择数据库
if(!$this->linkID){
//echo $this->GetError();
$this->DisplayError("DedeCms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错,如未安装本系统,请先运行安装程序,如果已经安装,请检查MySQL服务或修改include/config_base.php的配置!");
exit();
}
@mysql_select_db($this->dbName);
$mysqlver = explode('.',$this->GetVersion());
$mysqlver = $mysqlver[0].'.'.$mysqlver[1];
if($mysqlver>4.0) @mysql_query("SET NAMES '".$GLOBALS['cfg_db_language']."';",$this->linkID);
if($mysqlver>5.0) @mysql_query("SET sql_mode='' ;", $this->linkID);
return true;
}
//
//获得错误描述
//
function GetError()
{
$str = ereg_replace("'|\"","`",mysql_error());
return $str;
}
//
//关闭数据库
//
function Close()
{
@mysql_close($this->linkID);
$this->isClose = true;
if(is_object($GLOBALS['dsql'])){ $GLOBALS['dsql']->isClose = true; }
$this->FreeResultAll();
}
//
//执行一个不返回结果的SQL语句,如update,delete,insert等
//
function ExecuteNoneQuery($sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
if(is_array($this->parameters)){
foreach($this->parameters as $key=>$value){
$this->queryString = str_replace("@".$key,"'$value'",$this->queryString);
}
}
return mysql_query($this->queryString,$this->linkID);
}
//
//执行一个返回影响记录条数的SQL语句,如update,delete,insert等
//
function ExecuteNoneQuery2($sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
if(is_array($this->parameters)){
foreach($this->parameters as $key=>$value){
$this->queryString = str_replace("@".$key,"'$value'",$this->queryString);
}
}
mysql_query($this->queryString,$this->linkID);
return mysql_affected_rows($this->linkID);
}
function ExecNoneQuery($sql="")
{
return $this->ExecuteNoneQuery($sql);
}
//
//执行一个带返回结果的SQL语句,如SELECT,SHOW等
//
function Execute($id="me",$sql="")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!="") $this->SetQuery($sql);
$this->result[$id] = @mysql_query($this->queryString,$this->linkID);
if(!$this->result[$id]){
$this->DisplayError(mysql_error()." - Execute Query False! ".$this->queryString."");
}
}
function Query($id="me",$sql="")
{
$this->Execute($id,$sql);
}
//
//执行一个SQL语句,返回前一条记录或仅返回一条记录
//
function GetOne($sql="",$acctype=MYSQL_BOTH)
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
if($sql!=""){
if(!eregi("limit",$sql)) $this->SetQuery(eregi_replace("[,;]$","",trim($sql))." limit 0,1;");
else $this->SetQuery($sql);
}
$this->Execute("one");
$arr = $this->GetArray("one",$acctype);
if(!is_array($arr)) return("");
else { @mysql_free_result($this->result["one"]); return($arr);}
}
//
//执行一个不与任何表名有关的SQL语句,Create等
//
function ExecuteSafeQuery($sql,$id="me")
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
$this->result[$id] = @mysql_query($sql,$this->linkID);
}
//
//返回当前的一条记录并把游标移向下一记录
// MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH
//
function GetArray($id="me",$acctype=MYSQL_BOTH)
{
if($this->result[$id]==0) return false;
else return mysql_fetch_array($this->result[$id],$acctype);
}
function GetObject($id="me")
{
if($this->result[$id]==0) return false;
else return mysql_fetch_object($this->result[$id]);
}
//
//检测是否存在某数据表
//
function IsTable($tbname)
{
$this->result[0] = mysql_list_tables($this->dbName,$this->linkID);
while ($row = mysql_fetch_array($this->result[0]))
{
if(strtolower($row[0])==strtolower($tbname))
{
mysql_freeresult($this->result[0]);
return true;
}
}
mysql_freeresult($this->result[0]);
return false;
}
//
//获得MySql的版本号
//
function GetVersion()
{
global $dsql;
if($dsql->isClose){
$this->Open(false);
$dsql->isClose = false;
}
$rs = mysql_query("SELECT VERSION();",$this->linkID);
$row = mysql_fetch_array($rs);
$mysql_version = $row[0];
mysql_free_result($rs);
return $mysql_version;
}
//
//获取特定表的信息
//
function GetTableFields($tbname,$id="me")
{
$this->result[$id] = mysql_list_fields($this->dbName,$tbname,$this->linkID);
}
//
//获取字段详细信息
//
function GetFieldObject($id="me")
{
return mysql_fetch_field($this->result[$id]);
}
//
//获得查询的总记录数
//
function GetTotalRow($id="me")
{
if($this->result[$id]==0) return -1;
else return mysql_num_rows($this->result[$id]);
}
//
//获取上一步INSERT操作产生的ID
//
function GetLastID()
{
//如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。
//可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
//$rs = mysql_query("Select LAST_INSERT_ID() as lid",$this->linkID);
//$row = mysql_fetch_array($rs);
//return $row["lid"];
return mysql_insert_id($this->linkID);
}
//
//释放记录集占用的资源
//
function FreeResult($id="me")
{
@mysql_free_result($this->result[$id]);
}
function FreeResultAll()
{
if(!is_array($this->result)) return "";
foreach($this->result as $kk => $vv){
if($vv) @mysql_free_result($vv);
}
}
//
//设置SQL语句,会自动把SQL语句里的#@__替换为$this->dbPrefix(在配置文件中为$cfg_dbprefix)
//
function SetQuery($sql)
{
$prefix="#@__";
$sql = str_replace($prefix,$this->dbPrefix,$sql);
$this->queryString = $sql;
}
function SetSql($sql)
{
$this->SetQuery($sql);
}
//
//显示数据链接错误信息
//
function DisplayError($msg)
{
echo "\r\n";
echo "
echo "\r\n";
echo "
echo "\r\n";
echo "\r\n
\r\n";
echo $msg;
echo "
";
echo "
\r\n\r\n";
echo "";
//$this->Close();
//exit();
}
}