收藏 分享(赏)

_PHP_DedeCMS_二次开发-数据库类详解-V53.doc

上传人:jinchen 文档编号:6614064 上传时间:2019-04-18 格式:DOC 页数:10 大小:100.50KB
下载 相关 举报
_PHP_DedeCMS_二次开发-数据库类详解-V53.doc_第1页
第1页 / 共10页
_PHP_DedeCMS_二次开发-数据库类详解-V53.doc_第2页
第2页 / 共10页
_PHP_DedeCMS_二次开发-数据库类详解-V53.doc_第3页
第3页 / 共10页
_PHP_DedeCMS_二次开发-数据库类详解-V53.doc_第4页
第4页 / 共10页
_PHP_DedeCMS_二次开发-数据库类详解-V53.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、 今天花点时间讲解下织梦的 sql 数据库类,近期本来是准备录制一套视频教程的,但由于视频压缩的问题迟迟没有开展工作,如果大家有什么好的视频压缩方式可以通过邮件的方式告诉我:tianya#(#).目前视频主要想做成 wmv 或者 rmvb 这种格式的,里面含有 ppt 文档以及课程的相关附件.其实数据库类织梦之前就有一个介绍,http:/ for MySQL,我这里以后者为例.当然这里需要注意,在创建表的时候我们已经安装了一个 DedeCMS 程序, 我们今天的操作是以 DedeCMS 程序扩展来讲解的.当然程序安装后他自己也会创建 N 多表, 这些表以后再来介绍吧,或者也可以看看 http:

2、/ dedebbs,表前缀用的默认的“dede_“,我们用 Navicat for MySQL来创建一个名为“dede_test“的表 ,里面就 2 个字段,1 个 id,作为唯一标识,另一个 name 作为名称(图 1).然后往里面添加测试数据(图 2),这个操作类似于 Access 或者 EXCEL,比较简单,这里不做冗述.(图 1)(图 2)这里需要注意的是,我们采用的是 gbk 版本的程序,所以数据表相关的编码也要采用相应版本的编码,在表的“选项“ 中设置为 gbk 相关.下面我将 sql 列出, 如果懒得去创建表,可以在dedecms 系统后台的命令运行器中执行下:(图 3)- -

3、表 dede_test结构- -DROP TABLE IF EXISTS dede_test;CREATE TABLE dede_test (id mediumint(8) NOT NULL AUTO_INCREMENT,name char(60) NOT NULL DEFAULT ,PRIMARY KEY (id) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=gbk;- - 插入到 dede_test 中的数据- -INSERT INTO dede_test VALUES (1, 测试名字 1);INSERT INTO dede_test V

4、ALUES (2, 这是第二个);INSERT INTO dede_test VALUES (3, 第三个喽);INSERT INTO dede_test VALUES (4, 第四个);2.连接数据库,查询数据表表“dede_test“我们已经创建完成了 ,接下来我们要连接数据库了, 其实方法非常简单.我们在网站根目录中创建一个 test.php 的文件,这个文件最好也用 gbk 的编码,可以用专门的编辑器来创建文件.连接数据库最简单的方法就是引入 include 文件夹下面的 common.inc.php 文件, 编辑php 代码 :写入以下内容:test.php-上面代码就是将一个$ds

5、ql 类输出,我们再执行下这个文件http:/ 只是在本地做了个解析,其实就是localhost),我们查看源代码,看到下面的内容( 图 4):(图 4)DedeSql Object(linkID = Resource id #6dbHost = localhostdbUser = rootdbPwd = 123456dbName = dedebbsdbPrefix = dede_result = Array(me = 0)queryString = parameters = Array()isClose = safeCheck = 1)这个就说明我们已经成功连接数据库了,dbHost,db

6、User.这些都是数据库的相关信息,也就是我们保存在配置文件中的datacommon.inc.php 内容, 引入数据库类的时候,默认就被创建了$dsql 或者$db,所以直接引入配置文件就可以了.接下来我们来做一个简单的查询操作,接着上面的代码我们继续写test.php-IsTable(dede_test)/如果存在 dede_test 表/-/| 查询一条记录 |/| GetOne() |/-/ $row = $dsql-GetOne(“SELECT * FROM dede_test WHERE id = 3“);print_r($row);?-这里我们用了$dsql 类的 2 个方法,I

7、sTable()以及 GetOne(),IsTable 先来判断这个表是否存在,如果存在我们就继续执行,他返回的是一个 bool 值,如果存在为 true 否则就为 false.接下来判断如果有这个表存在,则我们就执行查询单条记录的这个过程 ,即 GetOne,通过帮助文档可以知道:$arr = $db-GetOne($sql);也就是说查询的 sql 语句会传送回来一个数组. 我们运行 test.php 看下运行结果 :Array(id = 3name = 第三个喽)这个说明我们查询 dede_test 这个表 id 为 3 的数据成功了 ,返回了一个$row 数组, 其中就存放了字段的值.

8、当然我们可以用 echo $rowname;或者$rowid来输出我们查询出来的结果Tip:其实我们可以深入的研究下 dedesql.class.php 这个类 ,258 行就有这个方法:/执行一个 SQL 语句,返回前一条记录或仅返回一条记录function GetOne($sql=,$acctype=MYSQL_ASSOC)global $dsql;if($dsql-isClose)$this-Open(false);$dsql-isClose = false;if(!empty($sql)if(!eregi(“limit“,$sql) $this-SetQuery(eregi_repla

9、ce(“,;$“,trim($sql).“ limit 0,1;“);/这里用正则看看 limit 是否存在,如果不存在的话就自动加上 limit 0,1 这个内容, 关于 limit 的介绍可以去看看 SQL 关于这个的介绍else $this-SetQuery($sql);$this-Execute(“one“);$arr = $this-GetArray(“one“,$acctype);if(!is_array($arr)return ;elsemysql_free_result($this-result“one“); return($arr);/清空资源,返回这个数组3.深入查询, 继

10、续研究 SELECT刚才讲了查询一条记录,其实这个查询一条记录可以理解为我们内容页查询一篇文章,只是获取单条记录并将内容显示出来,但往往我们经常遇到的是查询列表 ,及dede:arclist/或者dede:list/,查询列表的话涉及到查询多条记录.继续修改代码:test.php-IsTable(dede_test)/如果存在 dede_test 表/-/| 查询一条记录 |/| GetOne() |/-/ $row = $dsql-GetOne(“SELECT * FROM dede_test WHERE id = 3“);echo “查询 id=3 的记录:显示结果:“;print_r($

11、row);/-/| 查询多条记录 |/| Execute() |/-/ echo “查询 dede_test 表中的所有记录:显示结果:“;$sql = “SELECT * FROM dede_test“;$dsql-Execute(me,$sql);while($arr = $dsql-GetArray(me)echo “id = $arrid ,name = $arrname“;?-我们运行 test.php 看到显示以下的内容 :查询 dede_test 表中的所有记录:显示结果:id = 1 ,name = 测试名字 1id = 2 ,name = 这是第二个id = 3 ,name

12、= 第三个喽id = 4 ,name = 第四个这个说明我们已经成功将表 dede_test 中的数据输出,当然主要是执行了那个“SELECT * FROM dede_test“,这是一个最简单的 sql 查询语句,当然也能够用到 order by 这些排序或者条件去查询,详细可以参考 sql 相关内容.同时这里需要说明的是这里除了用$dsql-GetArray(me)来获取内容到数组,还可以用$dsql-GetObject(“me“)获取内容到对象,不过调用方法有些不同:主要这里通过$dbobj-fieldname 来调用查询出来的数据while($dbobj = $dsql-GetObje

13、ct(me)echo “id = $dbobj-id ,name = $dbobj-name“;tips:这里查询完了其实还可以用$dsql-GetTotalRow(“me“)来获取下查询出来的总数 .4.插入删除, 也要用到 SQL上面我们介绍了如何用 dsql 来查询数据,主要有获取单条记录和获取多条记录 2 种, 接下来我们来了解下使用 dsql 其他特性来为我们的 test.php 加入添加内容和删除内容的功能.先来了解下插入数据库的操作,我们先做一个表单,这个表单用于提交数据 name 的. 表单代码如下:用于提交数据的表单:名称 :这里我们用了一个隐藏域 dopost 来存放操作方

14、法,输入框 name 用来存放输入数据, 然后传递给当前页面,再进行处理,这时候我们需要在 test.php 中加入部分的表单处理操作:/-/| 表单处理过程 |/| Save() |/-/ empty($dopost)? “ : $dopost;if($dopost = “save“)/如果执行插入操作$sql = “INSERT INTO dede_test (name) VALUES ($name)“;$dsql-ExecuteNoneQuery($sql); /执行这个插入语句$lastInsertID = $dsql-GetLastID(); /获取插入后的最后的 ID,然后再传给下

15、一个页面ShowMsg(“成功增加一条记录内容!“,“test.php?id=$lastInsertID“);exit();这里主要是一个 INSERT INTO 语句,然后通过$dsql 的 ExecuteNoneQuery 方法来执行这个操作,并且获取插入数据最后一个 id 再将其传递给下一个页面以便高亮显示 .我们可以在编辑框中插入一条数据来测试下,看看插入数据后的返回结果(图 5).(图 5)其实删除的操作也是如此,我们只需要稍微做个修改就可以了,增加一个 dopost 操作为del 的判断,然后在显示数据后面增加一个超链接,将 id 以 get 方式进行传递.并最后进行处理.下面是我

16、们修改循环查询输出的部分内容,有如下修改:while($dbobj = $dsql-GetObject(me)if($id=$dbobj-id)/如果传递的 id 值和查询值相同,则高亮显示最后一条插入记录echo “id = $dbobj-id ,name = $dbobj-name id删除 “;/这里增加了一个删除的超链接elseecho “id = $dbobj-id ,name = $dbobj-name id删除“;下面是 del 这个 post 的判断:empty($dopost)? “ : $dopost;if($dopost = “save“)/如果执行插入操作$sql =

17、“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) $sql = “DELETE FROM dede_test WHERE (id=$id)“;$dsql-ExecuteNoneQuery($s

18、ql);ShowMsg(“成功删除一条记录内容!“,“test.php“);exit();tips:这里用到了一个 ShowMsg()函数,这个是用来返回一个对话框的,详细可以查看下includecommon.func.php 的 372 行相关函数的代码.这里我们结合了 DedeCMS 程序的 dedesql 类讲解了这个类的常见的用法 ,我们不难发现用这个类操作数据库是非常方便的,当然这个需要用户对 sql 比较熟悉. 今天我们就讲解到这里了,下次有机会再结合 datalist 类和模板引擎来介绍织梦二次开发相关的内容.如果大家有什么好的学习织梦的意见或建议还希望给我电邮:tianya#(#).本次教程相关附件:课程附件下载

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报