Dedesql數據庫類詳解(二次開發必備教程)(轉)

http://www.dedecms.com/help/development/2009/1028/1076.html

織夢DedeCMS的二次開發不僅僅是會寫寫織夢的標簽,會制作織夢的模板。很多時候,我們需要對織夢DedeCMS的數據庫進行查詢、插入、刪除等等之類的操作,進行這一類的操作之前,我們必須知道織夢DedeCMS的數據庫類,No牛網整理了織夢天涯版主關于DedeCMS程序的dedesql類常見的用法講解的文章,希望有朋友用的上。

1.創建數據表

為了讓講解更加的貼合實際,天涯版主創建了一個名為"dede_test"的表,里面就2個字段,1個id,作為唯一標識,另一個name作為名稱。然后往里面添加測試數據,這個操作類似于Access或者EXCEL,比較簡單,這里不做冗述。

?

使用如下的SQL語句插入一些數據供操作使用:

1
INSERT INTO `dede_test` VALUES ('1', '測試名字1');INSERT INTO `dede_test` VALUES ('2', '這是第二個');INSERT INTO `dede_test` VALUES ('3', '第三個嘍');INSERT INTO `dede_test` VALUES ('4', '第四個');

2.連接數據庫

在對織夢DedeCMS的數據庫進行操作之前,當然是先連接數據庫了,方法非常簡單。只需要在操作的文件中引入include文件夾下面的common.inc.php文件即可。可以在網站根目錄中創建一個test.php的文件來進行相關的測試操作,在這個文件中寫入如下的代碼:

1
<!--?php??????? require_once (dirname(__FILE__) . "/include/common.inc.php");??????? print_r($dsql);?-->

在瀏覽器中運行之后,查看源代碼就可以得到如下圖所示的代碼:

織夢數據庫操作結果1

這個就說明我們已經成功連接數據庫了,[dbHost],[dbUser]...這些都是數據庫的相關信息,也就是我們保存在配置文件中的\data\common.inc.php內容,引入數據庫類的時候,默認就被創建了$dsql或者$db,所以直接引入配置文件就可以了。

接下來做一個簡單的查詢操作,接著上面的代碼我們繼續寫test.php文件,代碼如下:

1
<!--?php????? require_once (dirname(__FILE__) . "/include/common.inc.php");????? if($dsql--->IsTable('dede_test')){????????? //如果存在dede_test表????????? //-------------------????????? //|??? 查詢一條記錄 |????????? //|??? GetOne()???? |????????? //-------------------????????? //??????? ↓????????? $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");????????? print_r($row);????? }?>

這里我們用了$dsql類的2個方法,IsTable()以及GetOne(),IsTable先來判斷這個表是否存在,如果存在我們就繼續執行,他返回的是一個bool值,如果存在為true否則就為false。

接下來判斷如果有這個表存在,則我們就執行查詢單條記錄的這個過程,即GetOne,通過幫助文檔可以知道:$arr = $db->GetOne($sql);也就是說查詢的sql語句會傳送回來一個數組,我們運行test.php看到如下運行結果:

1
Array(??? [id] => 3??? [name] => 第三個嘍)

這個說明我們查詢dede_test這個表id為3的數據成功了,返回了一個$row數組,其中就存放了字段的值。當然我們可以用echo $row['name'];或者$row['id']來輸出我們查詢出來的結果。

3.查詢數據庫

剛才講了查詢一條記錄,其實這個查詢一條記錄可以理解為我們內容頁查詢一篇文章,只是獲取單條記錄并將內容顯示出來,但往往我們經常遇到的是查詢列表,及{dede:arclist/}或者{dede:list/},查詢列表的話涉及到查詢多條記錄。

繼續修改test.php代碼:

1
<!--?php????? require_once (dirname(__FILE__) . "/include/common.inc.php");????? if($dsql--->IsTable('dede_test')){????????? //如果存在dede_test表????????? //-------------------????????? //|??? 查詢一條記錄 |????????? //|??? GetOne()???? |????????? //-------------------????????? //??????? ↓????????? $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");????????? echo "查詢id=3的記錄:<br>顯示結果:";????????? print_r($row);????????? //-------------------????????? //|??? 查詢多條記錄 |????????? //|??? Execute()???? |????????? //-------------------????????? //??????? ↓????????? echo "<hr>查詢dede_test表中的所有記錄:<br>顯示結果:<br>";????????? $sql = "SELECT * FROM dede_test";??????????? $dsql->Execute('me',$sql);??????????? while($arr = $dsql->GetArray('me'))??????????? {??????????????? echo "id = {$arr['id']} ,name = {$arr['name']}<br>";??????????? }????? }?>

運行test.php看到顯示以下的內容:

1
查詢dede_test表中的所有記錄:顯示結果:id = 1 ,name = 測試名字1id = 2 ,name = 這是第二個id = 3 ,name = 第三個嘍id = 4 ,name = 第四個

這個說明我們已經成功將表dede_test中的數據輸出,當然主要是執行了那個"SELECT * FROM dede_test",這是一個最簡單的sql查詢語句,當然也能夠用到order by這些排序或者條件去查詢,詳細可以參考sql相關內容。

同時這里需要說明的是這里除了用$dsql->GetArray('me')來獲取內容到數組,還可以用$dsql->GetObject("me")獲取內容到對象,不過調用方法有些不同,主要這里通過$dbobj->fieldname來調用查詢出來的數據:

1
while($dbobj = $dsql->GetObject('me'))??????????? {??????????????? echo "id = {$dbobj->id} ,name = {$dbobj->name}<br>";??????????? }

4.插入刪除操作數據庫

上面我們介紹了如何用dsql來查詢數據,主要有獲取單條記錄和獲取多條記錄2種,接下來我們來了解下使用dsql其他特性來為我們的test.php加入添加內容和刪除內容的功能。先來了解下插入數據庫的操作,我們先做一個表單,這個表單用于提交數據name的。表單代碼如下:

1
<hr>用于提交數據的表單:<br><form action="test.php" type="post">??? <input name="dopost" type="hidden" value="save">??? 名稱:<input name="name" type="text" value="">??? <input name="提交" type="submit" value="提交"></form>

這里我們用了一個隱藏域dopost來存放操作方法,輸入框name用來存放輸入數據,然后傳遞給當前頁面,再進行處理,這時候我們需要在test.php中加入部分的表單處理操作:

1
//-------------------??????? //|??? 表單處理過程 |??????? //|??? Save()???? |??????? //-------------------??????? //??????? ↓????? empty($dopost)? "" : $dopost;????? if($dopost == "save"){????????? //如果執行插入操作????????? $sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";????????? $dsql->ExecuteNoneQuery($sql); //執行這個插入語句????????? $lastInsertID = $dsql->GetLastID(); //獲取插入后的最后的ID,然后再傳給下一個頁面????????? ShowMsg("成功增加一條記錄內容!","test.php?id={$lastInsertID}");????????? exit();????? }

這里主要是一個INSERT INTO 語句,然后通過$dsql的ExecuteNoneQuery方法來執行這個操作,并且獲取插入數據最后一個id再將其傳遞給下一個頁面以便高亮顯示。我們可以在編輯框中插入一條數據來測試下,看看插入數據后的返回結果:

織夢數據庫操作結果2

其實刪除的操作也是如此,我們只需要稍微做個修改就可以了,增加一個dopost操作為del的判斷,然后在顯示數據后面增加一個超鏈接,將id以get方式進行傳遞.并最后進行處理。下面是我們修改循環查詢輸出的部分內容,有如下修改:

1
while($dbobj = $dsql->GetObject('me'))??????????? {??????????????? if($id==$dbobj->id){????????????????? //如果傳遞的id值和查詢值相同,則高亮顯示最后一條插入記錄??????????????????? echo "<font color="red">id = {$dbobj->id} ,name = {$dbobj->name}</font> <a href="test.php?dopost=del&id={$dbobj->id}">[刪除]</a>??? <br>";//這里增加了一個刪除的超鏈接??????????????? }else{??????????????????? echo "id = {$dbobj->id} ,name = {$dbobj->name} <a href="test.php?dopost=del&id={$dbobj->id}">[刪除]</a><br>";??????????????? }??????????? }????? //下面是del這個post的判斷:????? empty($dopost)? "" : $dopost;????? if($dopost == "save"){????????? //如果執行插入操作????????? $sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";????????? $dsql->ExecuteNoneQuery($sql);????????? $lastInsertID = $dsql->GetLastID();????????? ShowMsg("成功增加一條記錄內容!","test.php?id={$lastInsertID}");????????? exit();????? }elseif($dopost == "del"){????????? //如果dopost為del,則刪除數據????????? $id = isset($id) && is_numeric($id) ? $id : 0;????????? $sql = "DELETE FROM `dede_test` WHERE (`id`='{$id}')";????????? $dsql->ExecuteNoneQuery($sql);????????? ShowMsg("成功刪除一條記錄內容!","test.php");????????? exit();????? }

以上就是織夢DedeCMS數據庫類操作的全部過程,如果有不明白的地方,可以去查看天涯版主的原文,原文的地址如下:http://www.dedecms.com/help/development/2009/1028/1076.html。

轉載于:https://www.cnblogs.com/xihong2014/p/4600419.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257139.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257139.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257139.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

裝系統換固態硬盤方法

1、將買回的固態硬盤直接換上電腦的原先機械硬盤 2、或者將自己的光驅拆卸&#xff0c;將固態硬盤裝上去 3、電腦進入boss 界面&#xff0c;找到boot(引導)欄&#xff0c;找到自己的u盤&#xff0c;進入后先分區&#xff0c;然后再重啟&#xff0c; 然后再進入BOSS進入U盤里&…

學習筆記(02):Python網絡編程并發編程-assert斷言的用途

立即學習:https://edu.csdn.net/course/play/24458/296228?utm_sourceblogtoedu 異常處理 1.異常的捕捉 try:正常需要運行的代碼except 可能出現的錯誤 as e:出現這種錯誤需要運行的代碼...except Exception as e:捕捉未知的錯誤&#xff0c;并且將需要運行的代碼放于此處el…

ionic tab顯示到頂部去了

添加配置調整顯示位置 .config(function($stateProvider, $urlRouterProvider,$ionicConfigProvider) {$ionicConfigProvider.platform.ios.tabs.style(standard);$ionicConfigProvider.platform.ios.tabs.position(bottom);$ionicConfigProvider.platform.android.tabs.style(…

EasyUI加載外部頁面需要使用html片段

最后總結&#xff0c;如果使用easyui中加載外部界面的組件&#xff0c;例如&#xff1a;panel,window&#xff0c;dailog,tabs等。請確保引入的界面是一個html片段。html片段正確的寫法再次提醒不要出現<html><head><body>三個標簽。 http://www.cnblogs.com…

留言板

本軟件是作為部門內員工之間留言及發送消息使用。 系統必須通過口令驗證&#xff0c;登錄進入。方法是從數據庫內取出用戶姓名和口令的數據進行校驗。 系統包含四部分功能 1 登錄&#xff1a;驗證用戶名與口令&#xff0c;保存會話信息&#xff0c;進入主界面。 界面顯示代碼 &…

c++的32位和64位類型符的位數

看一下結果&#xff1a;WIN32下&#xff1a;sizeof(char):1sizeof(short):2sizeof(int):4sizeof(long):4sizeof(long long):8sizeof(unsigned int):4sizeof(float):4sizeof(double):8sizeof(pointer):4請按任意鍵繼續. . .x64下&#xff1a;sizeof(char):1sizeof(short):2sizeo…

ORA-00980與PL/SQL程序編譯出錯

今天碰到一個有意思的問題。為了降低統計分析數據庫的計算和磁盤空間壓力。我們使用了將遠程數據庫中數據通過DBLINK和SYNONYM的形式來緩解當前統計數據庫所面臨的問題。工作實施的比較順利。但是統計人員發現有幾個執行統計的PL/SQL過程和包&#xff08;PACKAGE&#xff09;失…

學習筆記(03):Python實戰編程-sys模塊

立即學習:https://edu.csdn.net/course/play/19711/255505?utm_sourceblogtoedu sys是一個系統的環境交互模塊&#xff0c;是唯一一個可以與操作系統有關的模塊 #codingutf-8 import sysprint(sys.modules) print(sys.)

spring+mybatis實現讀寫分離

springmore-core springibatis實現讀寫分離 特點 無縫結合springibatis&#xff0c;對于程序員來說&#xff0c;是透明的 除了修改配置信息之外&#xff0c;程序的代碼不需要修改任何東西 支持spring的容器事務規則:基于spring配置的容器事務讀寫事務到主庫只讀事務到從庫如果沒…

DEV C++如何不需要通過建項目可以調試程序

1點擊文件 2、開始寫一段類的程序 #include<iostream>using namespace std;class Point //點類定義 { int x,y; //點的x和y坐標public: void lnitPoint(int,int); //設置坐標 int GetX(){ return x;} //取x坐標 int GetY() {return y;} //取y坐標 void …

創建數據庫

先創建數據庫&#xff1a; CREATE DATABASE SCUTCS; 接著&#xff0c;創建表&#xff1a; CREATE TABLE STUDENT ( SNO CHAR(7) NOT NULL, SNAME VARCHAR(8) NOT NULL, SEX CHAR(2) NOT NULL, BDATE DATE NOT NULL, HEIGHT DEC(5,2) DEFAULT 000.00, PRIMARY KEY(SNO) ); 然后插…

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結

2017-2018-1 20155301 《信息安全系統設計基礎》第7周學習總結 教材學習內容總結 作為我們處理器實現的運行實例&#xff0c;因為受x86-64指令集的啟發&#xff0c;它被俗稱為“x86”&#xff0c;所以我們稱我們的指令集為“Y86-64”&#xff0c;與“x86-64”相比&#xff0c;Y…

[學習筆記]面向對象VS面向過程

1.編程范式 為了實現同一個任務不同的編程方式類別稱為編程范式 2.面向過程編程 面向過程從上到下運行&#xff0c;將一個大問題分解成小問題&#xff0c;再將小問題繼續分解成足夠簡單在一定范圍內可以解答的小問題為止&#xff01;3.面向對象編程 面向對象簡稱為OOP&#x…

批處理系統和分時系統各具有什么特點?為什么分時系統的響應比較快?

批處理系統的特點如下 優點&#xff1a;系統的吞吐率較高。 &#xff08;作業的調度由系統控制&#xff0c;并允許幾道程序同時投入運行&#xff0c;只要合理的搭配作業&#xff08;例如把計算量大的作業和I/O量大的作業搭配&#xff09;就可以充分利用系統的資源&#xff09; …

怎么解決word敲空格刪掉后面的字的問題

將word左下角的改寫改為插入&#xff0c;或者筆記本的按下insert的按鈕

Dubbo原理解析-監控

Dubbo發布代碼中&#xff0c;自帶了一個簡易的監控中心實現。對于一般的小業務這個監控中心應該能夠滿足需求&#xff0c;對于那些大業務量的大公司一般都會有自己的監控中心&#xff0c;更加豐富的功能如常用的報警短信通知等等。這章講解分析使得讀者能夠了解一般的監控中心實…

學習筆記(04):Python網絡編程并發編程-什么是socket

立即學習:https://edu.csdn.net/course/play/24458/296233?utm_sourceblogtoedu 1.什么是網絡編程&#xff1f; 答&#xff1a;網絡編程也叫做socket編程即套接字編程&#xff0c;基于遵循socket套接字的規定進行的編程 2.什么是socket&#xff1f; 答&#xff1a;socket就是…

mysql 獲取自增主鍵

MyBatis 3.2.6插入時候獲取自增主鍵方法有二以MySQL5.5為例&#xff1a;方法1&#xff1a;<insert id"insert" parameterType"Person" useGeneratedKeys"true" keyProperty"id">insert into person(name,pswd) values(#{name},#…

虛擬主機用戶ftp和apache用戶文件互操作權限解決方法

方法1.用戶組控制方法 先給所有的虛擬主機主機中的虛擬用戶(ftp用戶)加入到apache這個組.然后設置umask為002.這樣用戶和組都有讀寫執行權限。這個是比較容易的方法.但不安全。不同的用戶可以刪除對方的文件&#xff0c;因為是同一個組,組有讀寫執行的權限. 方法2.使用linux高級…

數學的列向量內積計算方法

x(cos x1 y(-sinx1sinx1) cosx1) [x,y]cosx1*(-sinx1)sinx1*cosx1