Discuz X2二次開發之數據庫操做 DB類

Discuz X2的數據庫操做類主要包括如下幾個: php

DB::result_first 返回SQL查詢的惟一字段的惟一值,查詢結果是字符
DB::fetch_first 返回SQL查詢的多個字段的值,查詢結果是一個數組
DB::query 執行SQL查詢,包括兩種,一種是執行update,delete這些修改數據庫的操做,還有一種與DB::fetch配合作一個循環查詢
DB::fetch 與DB::query和while配合使用,造成一個循環
查詢數據表的表寫法:".DB::table('除擴展名外的數據表名')." ,說實話這種寫法很是浪費時間
首先來講下DB::result_first的用法:
此方法能夠做爲DB::fetch_first的精簡寫法,能夠一步獲得查詢結果,例如:
$num = DB::result_first("SELECT count(*) FROM ".DB::table('forum_thread')." WHERE displayorder >=0");
查詢結果$num爲論壇正常主題的總數
例子:
$subject = DB::result_first("SELECT subject FROM ".DB::table('forum_thread')." where tid= 10000");
$subject = DB::result_first("SELECT subject FROM ".DB::table('forum_thread')." WHERE displayorder >=0 order by dateline desc");
第一個查詢結果是tid爲10000的主題的標題,第二個查詢結果是最新一個論壇主題的標題
DB::fetch_first的用法
例子:
$userinfo = DB::result_first("SELECT username,email FROM ".DB::table('common_member')." WHERE uid=1");
查詢結果$userinfo是一個數組
$userinfo[username] uid爲1的用戶的用戶名
$userinfo[email] uid爲1的用戶的email
DB::query的用法
DB::query分爲兩種:
一、 修改數據庫
DB::query("update ".DB::table('forum_thread')." set views=views+1 where tid = 10000"); html

此查詢的結果是把tid爲10000的主題的瀏覽數增長1
DB::query("delete from ".DB::table('forum_thread')." where tid = 10000"); 數據庫

此查詢的結果是刪除tid爲10000的主題
DB::query("insert into ".DB::table('common_tag')." (tagname,status) values ('標籤名稱','0')"); 數組

此查詢的結果是在標籤主表裏面增長一個標籤「標籤名稱」,關於插入數據庫的高級用法會在下面的節裏面介紹
二、與DB::fetch配合作循環查詢 oop

例子:
$query = DB::query("SELECT tid,subject FROM ".DB::table('forum_thread')." WHERE displayorder >=0 order by dateline desc limit 10"); fetch

while($thread = DB::fetch($query)) { ui

echo '<a href="forum.php?mod=viewthread&tid='.$thread[tid].'" target="_blank">'.$thread[subject].'</a><br>' url

}
幫助
查詢結果爲最新的10個主題的加帖子連接的帖子標題換行顯示
注意:老版Discuz只有fetch_array,沒有fetch,新版Discuz X2只有fetch,沒有fetch_array,搞不清楚官方爲何要換寫法,實則做用不大。

Discuz X2查詢數據庫並分頁的程序寫法和模板寫法 spa


<pre name="code" class="php"><p style="line-height:25px; margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px; color:rgb(110,110,110); font-family:Arial,Helvetica,simsun,u5b8bu4f53; font-size:14px; background-color:rgb(246,246,237)"><strong><span style="color:rgb(110,110,110); font-family:Arial,Helvetica,simsun,u5b8bu4f53; font-size:14px; line-height:25px; background-color:rgb(246,246,237)"></span></strong></p><pre name="code" class="php">$num = DB::result_first("SELECT COUNT(*) FROM ".DB::table('forum_thread')." where dateline > $_G[timestamp] - 86400 * 30 and displayorder >=0");
2	 
3	$page = intval($_G['gp_page']);
4	 
5	$perpage = 20; //每頁顯示數量
6	 
7	$page = max(1, intval($page));
8	 
9	$start_limit = ($page - 1) * $perpage;
10	 
11	$theurl = "plus_new.php?action=list"; //分頁的連接前綴
12	 
13	$multi = multi($num, $perpage, $page, $theurl);
14	 
15	$threadlist = array();
16	 
17	$query = DB::query("SELECT tid,subject,dateline FROM ".DB::table('forum_thread')." where dateline > $_G[timestamp] - 86400 * 30 and displayorder >=0 order by dateline desc LIMIT $start_limit, $perpage ");
18	 
19	while($thread = DB::fetch($query)) {
20	 
21	$thread['dateline'] = dgmdate($thread['dateline']);
22	 
23	$threadlist[] = $thread;
24	 
25	}
26	 
27	include_once template("diy:plus/plus_new"); //調用模板 須要在template\default 目錄下新建plus目錄並新建一個plus_new.htm文件</pre><pre name="code" class="php"></pre>模板寫法<p></p><pre name="code" class="html"><!--{if $threadlist}-->
28	 
29	<!--{loop $threadlist $thread}-->
30	 
31	<a href="forum.php?mod=viewthread&tid=$thread[tid]" target="_blank">$thread[subject]</a>
32	 
33	$thread[dateline] <br>
34	 
35	<!--{/loop}-->
36	 
37	<!--{else}-->
38	 
39	暫無帖子
40	 
41	<!--{/if}-->
42	 
43	<!--{if $multi}--><div>$multi</div><!--{/if}--></pre><br>
44	<br>
45	<pre></pre>
46	<pre></pre>
47	<pre></pre>
48	<pre></pre>
49	<pre></pre>
50	<pre></pre>
51	<pre></pre>
52	<pre></pre>
53	<pre></pre>
54	 
55	</pre>
相關文章
相關標籤/搜索