您的位置:首页 > 数据库

Discuz X2二次开发之数据库操作

2012-12-11 17:14 323 查看
Discuz X2的数据库操作类主要包括以下几个:

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分为两种:

1、 修改数据库

DB::query("update ".DB::table('forum_thread')." set views=views+1 where tid =10000");

复制代码

此查询的结果是把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')");

复制代码

此查询的结果是在标签主表里面增加一个标签“标签名称”,关于插入数据库的高级用法会在下面的节里面介绍

2、与DB::fetch配合做循环查询

例子:

帮助
1
2
3
4
5
6
7
$query

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


while
(
$thread

=DB::fetch(
$query
)) {


echo

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


}


查询结果为最新的10个主题的加帖子链接帖子标题换行显示

注意:老版Discuz只有fetch_array,没有fetch,新版Discuz X2只有fetch,没有fetch_array,搞不清楚官方为什么要换写法,实则作用不大。

Discuz X2查询数据库并分页的程序写法和模板写法

程序部分

帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$num

=DB::result_first(
"SELECT COUNT(*) FROM "
.DB::table(
'forum_thread'
).
" where dateline > $_G[timestamp] - 86400 * 30 and displayorder >=0"
);


$page

=
intval
(
$_G
[
'gp_page'
]);


$perpage

=20;   
//每页显示数量


$page

=max(1,
intval
(
$page
));


$start_limit

=(
$page
- 1) *
$perpage
;


$theurl

=
"plus_new.php?action=list"
;
//分页的链接前缀


$multi

=multi(
$num
,
$perpage
,
$page
,
$theurl
);


$threadlist

=
array
();


$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 "
);


while
(
$thread

=DB::fetch(
$query
)) {


$thread
[
'dateline'
] =dgmdate(
$thread
[
'dateline'
]);


$threadlist
[] =

$thread
;


}


include_once

template(
"diy:plus/plus_new"
);
//调用模板 需要在template\default 目录下新建plus目录并新建一个plus_new.htm文件


模板写法:

帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--{if $threadlist}-->


<!--{loop $threadlist $thread}-->


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


$thread[dateline]  <br>


<!--{/loop}-->


<!--{else}-->


暂无帖子


<!--{/if}-->


<!--{if $multi}--><div>$multi</div><!--{/if}-->


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: