Discuz X的数据库操作类主要包括以下几个: 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配合做循环查询 例子: $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 ''.$thread[subject].' ' } 帮助 查询结果为最新的10个主题的加帖子链接的帖子标题换行显示 注意:老版Discuz只有fetch_array,没有fetch,新版Discuz X2只有fetch,没有fetch_array,搞不清楚官方为什么要换写法,实则作用不大。 Discuz X2查询数据库并分页的程序写法和模板写法 $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文件 模板写法 $thread[subject] $thread[dateline] $multi |
GMT+8, 2024-12-6 07:09 , Processed in 0.070984 second(s), 19 queries , Gzip On.
Powered by Discuz! X3.5
© 2001-2024 Discuz! Team.