http://www.dedecms.com/help/development/2009/1028/1076.html

织梦DedeCMS的二次开发不仅仅是会写写织梦的标签,会制作织梦的模板。很多时候,我们需要对织梦DedeCMS的数据库进行查询、插入、删除等等之类的操作,进行这一类的操作之前,我们必须知道织梦DedeCMS的数据库类,No牛网整理了织梦天涯版主关于DedeCMS程序的dedesql类常见的用法讲解的文章,希望有朋友用的上。

1.创建数据表

为了让讲解更加的贴合实际,天涯版主创建了一个名为"dede_test"的表,里面就2个字段,1个id,作为唯一标识,另一个name作为名称。然后往里面添加测试数据,这个操作类似于Access或者EXCEL,比较简单,这里不做冗述。

使用如下的SQL语句插入一些数据供操作使用:

1
INSERT INTO `dede_test` VALUES ('1', '测试名字1');INSERT INTO `dede_test` VALUES ('2', '这是第二个');INSERT INTO `dede_test` VALUES ('3', '第三个喽');INSERT INTO `dede_test` VALUES ('4', '第四个');

2.连接数据库

在对织梦DedeCMS的数据库进行操作之前,当然是先连接数据库了,方法非常简单。只需要在操作的文件中引入include文件夹下面的common.inc.php文件即可。可以在网站根目录中创建一个test.php的文件来进行相关的测试操作,在这个文件中写入如下的代码:

1
<!--?php        require_once (dirname(__FILE__) . "/include/common.inc.php");        print_r($dsql);?-->

在浏览器中运行之后,查看源代码就可以得到如下图所示的代码:

这个就说明我们已经成功连接数据库了,[dbHost],[dbUser]...这些都是数据库的相关信息,也就是我们保存在配置文件中的\data\common.inc.php内容,引入数据库类的时候,默认就被创建了$dsql或者$db,所以直接引入配置文件就可以了。

接下来做一个简单的查询操作,接着上面的代码我们继续写test.php文件,代码如下:

1
<!--?php      require_once (dirname(__FILE__) . "/include/common.inc.php");      if($dsql--->IsTable('dede_test')){          //如果存在dede_test表          //-------------------          //|    查询一条记录 |          //|    GetOne()     |          //-------------------          //        ↓          $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");          print_r($row);      }?>

这里我们用了$dsql类的2个方法,IsTable()以及GetOne(),IsTable先来判断这个表是否存在,如果存在我们就继续执行,他返回的是一个bool值,如果存在为true否则就为false。

接下来判断如果有这个表存在,则我们就执行查询单条记录的这个过程,即GetOne,通过帮助文档可以知道:$arr = $db->GetOne($sql);也就是说查询的sql语句会传送回来一个数组,我们运行test.php看到如下运行结果:

1
Array(    [id] => 3    [name] => 第三个喽)

这个说明我们查询dede_test这个表id为3的数据成功了,返回了一个$row数组,其中就存放了字段的值。当然我们可以用echo $row['name'];或者$row['id']来输出我们查询出来的结果。

3.查询数据库

刚才讲了查询一条记录,其实这个查询一条记录可以理解为我们内容页查询一篇文章,只是获取单条记录并将内容显示出来,但往往我们经常遇到的是查询列表,及{dede:arclist/}或者{dede:list/},查询列表的话涉及到查询多条记录。

继续修改test.php代码:

1
<!--?php      require_once (dirname(__FILE__) . "/include/common.inc.php");      if($dsql--->IsTable('dede_test')){          //如果存在dede_test表          //-------------------          //|    查询一条记录 |          //|    GetOne()     |          //-------------------          //        ↓          $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");          echo "查询id=3的记录:<br>显示结果:";          print_r($row);          //-------------------          //|    查询多条记录 |          //|    Execute()     |          //-------------------          //        ↓          echo "<hr>查询dede_test表中的所有记录:<br>显示结果:<br>";          $sql = "SELECT * FROM dede_test";            $dsql->Execute('me',$sql);            while($arr = $dsql->GetArray('me'))            {                echo "id = {$arr['id']} ,name = {$arr['name']}<br>";            }      }?>

运行test.php看到显示以下的内容:

1
查询dede_test表中的所有记录:显示结果:id = 1 ,name = 测试名字1id = 2 ,name = 这是第二个id = 3 ,name = 第三个喽id = 4 ,name = 第四个

这个说明我们已经成功将表dede_test中的数据输出,当然主要是执行了那个"SELECT * FROM dede_test",这是一个最简单的sql查询语句,当然也能够用到order by这些排序或者条件去查询,详细可以参考sql相关内容。

同时这里需要说明的是这里除了用$dsql->GetArray('me')来获取内容到数组,还可以用$dsql->GetObject("me")获取内容到对象,不过调用方法有些不同,主要这里通过$dbobj->fieldname来调用查询出来的数据:

1
while($dbobj = $dsql->GetObject('me'))            {                echo "id = {$dbobj->id} ,name = {$dbobj->name}<br>";            }

4.插入删除操作数据库

上面我们介绍了如何用dsql来查询数据,主要有获取单条记录和获取多条记录2种,接下来我们来了解下使用dsql其他特性来为我们的test.php加入添加内容和删除内容的功能。先来了解下插入数据库的操作,我们先做一个表单,这个表单用于提交数据name的。表单代码如下:

1
<hr>用于提交数据的表单:<br><form action="test.php" type="post">    <input name="dopost" type="hidden" value="save">    名称:<input name="name" type="text" value="">    <input name="提交" type="submit" value="提交"></form>

这里我们用了一个隐藏域dopost来存放操作方法,输入框name用来存放输入数据,然后传递给当前页面,再进行处理,这时候我们需要在test.php中加入部分的表单处理操作:

1
//-------------------        //|    表单处理过程 |        //|    Save()     |        //-------------------        //        ↓      empty($dopost)? "" : $dopost;      if($dopost == "save"){          //如果执行插入操作          $sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";          $dsql->ExecuteNoneQuery($sql); //执行这个插入语句          $lastInsertID = $dsql->GetLastID(); //获取插入后的最后的ID,然后再传给下一个页面          ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");          exit();      }

这里主要是一个INSERT INTO 语句,然后通过$dsql的ExecuteNoneQuery方法来执行这个操作,并且获取插入数据最后一个id再将其传递给下一个页面以便高亮显示。我们可以在编辑框中插入一条数据来测试下,看看插入数据后的返回结果:

其实删除的操作也是如此,我们只需要稍微做个修改就可以了,增加一个dopost操作为del的判断,然后在显示数据后面增加一个超链接,将id以get方式进行传递.并最后进行处理。下面是我们修改循环查询输出的部分内容,有如下修改:

1
while($dbobj = $dsql->GetObject('me'))            {                if($id==$dbobj->id){                  //如果传递的id值和查询值相同,则高亮显示最后一条插入记录                    echo "<font color="red">id = {$dbobj->id} ,name = {$dbobj->name}</font> <a href="test.php?dopost=del&id={$dbobj->id}">[删除]</a>    <br>";//这里增加了一个删除的超链接                }else{                    echo "id = {$dbobj->id} ,name = {$dbobj->name} <a href="test.php?dopost=del&id={$dbobj->id}">[删除]</a><br>";                }            }      //下面是del这个post的判断:      empty($dopost)? "" : $dopost;      if($dopost == "save"){          //如果执行插入操作          $sql = "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) && is_numeric($id) ? $id : 0;          $sql = "DELETE FROM `dede_test` WHERE (`id`='{$id}')";          $dsql->ExecuteNoneQuery($sql);          ShowMsg("成功删除一条记录内容!","test.php");          exit();      }

以上就是织梦DedeCMS数据库类操作的全部过程,如果有不明白的地方,可以去查看天涯版主的原文,原文的地址如下:http://www.dedecms.com/help/development/2009/1028/1076.html。

Dedesql数据库类详解(二次开发必备教程)(转)的更多相关文章

  1. Dedesql数据库类详解(二次开发必备教程)

    其实数据库类织梦之前就有一个介绍,http://help.dedecms.com/v53/archives/functions/db/,这篇文章讲解了数据库类的一些常见的使用方法,不过没有结合例子去介 ...

  2. ecmall数据库表详解 二次开发必备

    文章分类表ecm_acategory 字段 类型 Null 默认 注释 cate_id int(10) 否   自增ID号,分类ID号 cate_name varchar(100) 否   分类的名称 ...

  3. Dedesql数据库类详解

    今天花点时间讲解下织梦的sql数据库类,近期本来是准备录制一套视频教程的,但由于视频压缩的问题迟迟没有开展工作,如果大家有什么好的视频压缩方式可以通过邮件的方式告诉我:tianya#dedecms.c ...

  4. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  5. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  6. Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解

    1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...

  7. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  8. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  9. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

随机推荐

  1. 在Kotlin中 使用js 函数

    在Kotlin中 使用js 函数 import javax.script.Invocable import javax.script.ScriptEngineManager fun main(args ...

  2. jq限制字符个数

    <script> $(document).ready(function () { //限制字符个数 $(".box-right .title a").each(func ...

  3. hadoop 2.7.3 源码编译教程

    1.工具准备,最靠谱的是hadoop说明文档里要求具备的那些工具. 到hadoop官网,点击source下载hadoop-2.7.3-src.tar.gz. 解压之 tar -zxvf hadoop- ...

  4. 还在纠结注册.com域名还是.cn域名?

    一.概念 .com域名,国际最广泛流行的通用域名格式.国际化公司都会注册. .com域名:当然也可以选择.net/.org以.com为结尾的国际域名. 例如表示工商企业的 .com. 同时还有 .ne ...

  5. xml的servlet配置

    内容如下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="ht ...

  6. JQuery -- Jquery 中的Ajax, Jquery解析xml文件

    1. JQuery 对 Ajax 操作进行了封装,在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post(),第三层是$.getScript ...

  7. BZOJ3669/UOJ3 魔法森林(LCT)

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  8. 简单Trace类实现

    <C++沉思录>27章内容修改后所得: /************************************************************************/ ...

  9. BZOJ 3196 Tyvj 1730 二逼平衡树:线段树套splay

    传送门 题意 给你一个长度为 $ n $ 有序数列 $ a $ ,进行 $ m $ 次操作,操作有如下几种: 查询 $ k $ 在区间 $ [l,r] $ 内的排名 查询区间 $ [l,r] $ 内排 ...

  10. python学习笔记(threading接口性能压力测试)

    又是新的一周 延续上周的进度 关于多进程的学习 今天实践下 初步设计的接口性能压力测试代码如下: #!/usr/bin/env python # -*- coding: utf_8 -*- impor ...