Discuz X2二次开发之数据库操作 DB类
2017-10-16 15:31
351 查看
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为论坛正常主题的总数
例子:
第一个查询结果是tid为10000的主题的标题
第二个查询结果是最新一个论坛主题的标题
DB::fetch_first的用法
例子:
查询结果$userinfo是一个数组
$userinfo[username] uid为1的用户的用户名
$userinfo[email] uid为1的用户的email
DB::query的用法
DB::query分为两种:
1、 修改数据库
此查询的结果是把tid为10000的主题的浏览数增加1
此查询的结果是删除tid为10000的主题
此查询的结果是在标签主表里面增加一个标签“标签名称”,关于插入数据库的高级用法会在下面的节里面介绍
2、与DB::fetch配合做循环查询
例子:
帮助
查询结果为最新的10个主题的加帖子链接的帖子标题换行显示
注意:老版Discuz只有fetch_array,没有fetch,新版Discuz X2只有fetch,没有fetch_array,搞不清楚官方为什么要换写法,实则作用不大。
Discuz X2查询数据库并分页的程序写法和模板写法
本教程重点琢磨语句
$userinfo = DB::result_first("SELECT username,email FROM ".DB::table('common_member')." WHERE uid=1");
对照
<p class="price"> <!-- 论坛列表页调用帖子付费价格--> <!--{eval $i = $thread['post']['tid']}--> <!--{eval $userinfo = DB::result_first("SELECT count(*) FROM ".DB::table('forum_trade')." WHERE tid =$i");}--> <i >¥</i> <span >$userinfo</span> <!-- end--> </p>
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为论坛正常主题的总数
例子:
第一个查询结果是tid为10000的主题的标题
$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");
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 '<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查询数据库并分页的程序写法和模板写法
<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>
相关文章推荐
- 数据操作__Discuz X2二次开发之数据库操作 DB类
- uchome二次开发 数据库操作
- destoon二次开发 操作数据库可运行示例
- phpcms二次开发操作数据库
- 使用android快速开发框架afinal的FinalDb操作android数据库
- Visual C# 2008+SQL Server 2005 数据库与网络开发--8.2.2 用户数据操作的并发
- WPF C#开发中利用SQLDMO进行数据库备份还原操作中的注意点
- VC开发错误之数据库操作
- Spring Boot实战之Rest接口开发及数据库基本操作
- c# WinForm开发 有关DataGridView控件数据库连接(存储和删除)的操作
- 谈谈在开发过程中关于数据库操作的问题
- 【Android 开发】:数据存储之 SQLite 数据库操作(三)
- 使用android快速开发框架afinal的FinalDb操作android数据库
- Com与.Net互操作(二次业务开发及插件开发总结)
- 利用反射实现对sqlite3数据库的crud(增删改查)操作的一个baseAndroidDao封装,安卓开发中
- vc++学生选课系统开发 sql 操作数据库添加数据 管理员对学生信息的添加
- SQL2K数据库开发十三之表操作查看表的定义及其相关性
- 数据库开发基本操作-SQL Server数据库技术(中)
- 控制器中添加DB类才可以操作数据库表中的数据
- JAVA操作数据库方式与设计模式应用-Java基础-Java-编程开发