POST TIME:2017-11-13 00:55
昨天整理了一下自己在使用DedeCMS時常用到的一些數(shù)據(jù)庫類函數(shù),大致有以下幾種:
首先說一下數(shù)據(jù)庫類文件位置:/include/dedesql.class.php(mysql)
或/include/dedesqli.class.php(mysqli)
系統(tǒng)會自動載入 dedesql.class.php
文件,并用$dsql = $db = new DedeSql(FALSE);
初始化數(shù)據(jù)庫連接,因此我們不需要再單獨(dú)初始化這個類,可以直接用$dsql
或$db
進(jìn)行操作。
DEDECMS提示:為了防止錯誤,操作完后不必關(guān)閉數(shù)據(jù)庫。
數(shù)據(jù)庫類中常用到的方法
1.獲取錯誤描述:
$error = $dsql->GetError();
返回值為錯誤描述信息
2.執(zhí)行一個不返回結(jié)果的SQL語句,如update,delete,insert
等
$result = $dsql->ExecuteNoneQuery($sql);
返回值為SQL語句是否執(zhí)行成功(TRUE/FALSE)
該方法可以用ExecNoneQuery()
替代,它實(shí)際上執(zhí)行的也是ExecuteNoneQuery()
3.執(zhí)行一個返回影響記錄條數(shù)的SQL語句,如update,delete,insert
等
$result = $dsql->ExecuteNoneQuery2($sql);
與上面相比,它返回的是SQL語句影響的記錄數(shù),而不是布爾值
4.執(zhí)行一個SQL語句,返回前一條記錄或僅返回一條記錄
$result = $dsql->GetOne($sql);
即使你的SQL語句中沒有寫Limit
,系統(tǒng)也會自動為其加上limit 0,1
。
下面是GetOne()
中為其加上limit
的語句:
if(!preg_match("/LIMIT/i",$sql)) $this->SetQuery(preg_replace("/[,;]$/i", '', trim($sql))." LIMIT 0,1;");
5.執(zhí)行條件查詢(select)語句
$dsql->SetQuery($sql); $dsql->Execute(); while($arr = $dsql->GetArray()){ //這里對查詢結(jié)果進(jìn)行操作 }
上面的寫法可以簡化為:
$dsql->Execute("me",$sql); while($arr = $dsql->GetArray()){ //這里對查詢結(jié)果進(jìn)行操作 }
GetArray()
的定義(Line:383)
function GetArray($rsid="me",$acctype=MYSQL_ASSOC);
其中”me”($rsid)被稱為記錄集游標(biāo),用來區(qū)分不同的查詢,當(dāng)$rsid
為”me”的時候,GetArray()
的參數(shù)可以省略,否則必須給出參數(shù)$rsid
。如:
$dsql->Execute("q1",$sql1); while($arr = $dsql->GetArray("q1")){ $dsql->Execute("q2",$dsql2); while($arr2 = $dsql->GetArray("q2")){ //這里對查詢結(jié)果進(jìn)行操作 } }
6.檢查某數(shù)據(jù)表是否存在
$result = $dsql->IsTable($tbname);
返回值為布爾值
7.獲取MySql的版本號
$version = $dsql->GetVersion($isformat=TRUE)
返回值為雙精度浮點(diǎn)數(shù)
8.獲取查詢的總記錄數(shù)
$num = $dsql->GetTotalRow($rsid="me");
9.獲取上一步INSERT操作產(chǎn)生的ID
$id = $dsql->GetLastID();
10.釋放記錄集占用的資源
$dsql->FreeResult($rsid="me");//(釋放游標(biāo)為"me"的記錄集資源) $dsql->FreeResultAll();//(釋放所有記錄集資源)
11.設(shè)置SQL語句,會自動把SQL語句里的dede_
替換為$this->dbPrefix
(在配置文件中為$cfg_dbprefix
)
$dsql->SetQuery($sql); $dsql->SetSql($sql);//(功能一樣)
12.重新選擇要操作的數(shù)據(jù)庫
$dsql->SelectDB($dbname);
13.獲取數(shù)據(jù)庫連接標(biāo)識
$dsql->linkID;
獲取這個連接標(biāo)識后,可以直接用mysql相關(guān)函數(shù)進(jìn)行數(shù)據(jù)庫操作,在非不得已情況,項(xiàng)目中一般不使用這個變量。