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