Dedesql数据信息库类详细说明(二次开发设计必需实

Dedesql数据信息库类详细说明(二次开发设计必需实例教程)

归类频道:织梦cms开发设计


  今日花点時间解读下织梦cms的sql数据信息库类,最近原本是提前准备视频录制一套视頻实例教程的,但因为视頻缩小的难题一拖再拖沒有进行工作中,假如大伙儿有哪些好的视頻缩小方法能够根据电子邮件的方法告知我:(# = @).现阶段视頻关键想干成wmv或是rmvb这类文件格式的,里边带有ppt文本文档及其课程内容的有关配件.

  实际上数据信息库类织梦cms以前就会有一个详细介绍,v53/archives/functions/db/,本文解读了数据信息库类的一些普遍的应用方式,但是沒有融合事例去详细介绍,许多人估算看过还并不是很懂,以便让大量人了解织梦cms的数据信息库应用类,能够够应用到开发设计中,这儿就来做下实例教程.

1.建立数据信息表
  在应用这一类以前,大家必须建立数据信息表,这儿大家强烈推荐好多个数据信息库实际操作专用工具:PHPMyadmin,Navicat for MySQL,我这儿之后者为例子.
自然这儿必须留意,在建立表的情况下大家早已安裝了一个DedeCMS程序,大家今日的实际操作是以DedeCMS程序拓展来说解的.自然软件安装后他自身也会建立N多表,这种表之后再说详细介绍吧,或是还可以看一下v53/montable/,这儿有一些常见表的表明.

  这儿大家这一数据信息库叫dedebbs,表作为前缀用的默认设置的 dede_ ,大家用Navicat for MySQL来建立一个名叫 dede_test 的表,里边就两个字段名,一个id,做为唯一标志,另外一个name做为名字(图1).随后往里加上检测数据信息(图2),ess或是EXCEL,较为简易,这儿不做冗述.

  (图1)

(图2)

.

  这儿必须留意的是,大家选用的是gbk版本号的程序,因此数据信息表有关的编号还要选用相对版本号的编号,在表的 选择项 中设定为gbk有关.下边我将sql列举,假如懒得去建立表,能够在dedecms系统软件后台管理的指令运作器中实行下:

 


(图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` VALUES ( 2 , 它是第二个
INSERT INTO `dede_test` VALUES ( 3 , 第三个喽
INSERT INTO `dede_test` VALUES ( 4 , 第四个

2.联接数据信息库,查寻数据信息表
  表 dede_test 大家早已建立进行了,接下去大家要联接数据信息库了,实际上方式十分简易.大家在网站网站根目录中建立一个test.php的文档,这一文档最好也用gbk的编号,能够用专业的编写器来建立文档.

  mon.inc.php文档,编写php编码:
载入下列內容:
test.php
-------------------------------
?php
    require_once (dirname(__FILE__) . /mon.inc.php
    print_r($dsql);
?
--------------------------------
  上边编码便是将一个$dsql类輸出,大家再实行下这一文档test.仅仅在当地干了个分析,实际上便是localhost),大家查询源码,见到下边的內容(图16):

. (图16)



DedeSql Object
(
  [linkID] = Resource id #6
  [dbHost] = localhost
  [dbUser] = root
  [dbPwd] = 123456
  [dbName] = dedebbs
  [dbPrefix] = dede_
  [result] = Array
  (
  [me] = 0
  )

  [queryString] =  
  [parameters] = Array
  (
  )

  [isClose] =  
  [safeCheck] = 1
)

  这一便说明大家早已取得成功联接数据信息库了,[dbHost],[dbUser]...这种全是数据信息库的有关信息内容,mon.inc.php內容,引进数据信息库类的情况下,默认设置就被建立了$dsql或是$db,因此立即引进配备文档便可以了.

  接下去大家来做一个简易的查寻实际操作,然后上边的编码大家再次写
test.php
-------------------------------
?php
    require_once (dirname(__FILE__) . /mon.inc.php
    if($dsql- IsTable( dede_test )){
      //假如存有dede_test表
      //-------------------
      //|  查寻一条纪录 |
      //|  GetOne()  |
      //-------------------
      // 
      $row = $dsql- GetOne( SELECT * FROM dede_test WHERE id = 3
      print_r($row);
    }
?
--------------------------------

  这儿大家用了$dsql类的两个方式,IsTable()及其GetOne(),IsTable先来分辨这一表是不是存有,假如存有大家就再次实行,他回到的是一个bool值,假如存有为true不然就为false.
接下去分辨假如有这一表存有,则大家就实行查寻一条纪录的这一全过程,即GetOne,根据协助文本文档能够了解:$arr = $db- GetOne($sql);换句话说查寻的sql句子会传输回家一数量组.大家运作test.php看看运作結果:.
Array
(
  [id] = 3
  [name] = 第三个喽
)
  这一表明大家查寻dede_test这一表id为3的数据信息取得成功了,回到了一个$row数字能量数组,在其中就储放了字段名的值.
自然大家能够用echo $row[ name 或是$row[ id ]来輸出大家查寻出去的結果

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_replace( [,;]$ , ,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
    }
    else
    {
      @mysql_free_result($this- result[ one ]); return($arr);//清除資源,回到这一数字能量数组
    }
  }


3.深层次查寻,再次科学研究SELECT
  刚刚讲了查寻一条纪录,实际上这一查寻一条纪录能够了解为大家內容页查寻一一篇文章,仅仅获得一条纪录并将內容显示信息出去,但通常大家常常碰到的是查寻目录,及{dede:arclist/}或是{dede:list/},查寻目录得话涉及到到查寻好几条纪录.

再次改动编码:
test.php
-------------------------------
?php
    require_once (dirname(__FILE__) . /mon.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见到显示信息下列的內容:
查寻dede_test表格中的全部纪录:
显示信息結果:
id = 1 ,name = 检测姓名1
id = 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来启用查寻出去的数据信息.
      while($dbobj = $dsql- GetObject( me ))
      {
        echo id = {$dbobj- id} ,name = {$dbobj- name} br /
      }
 


4.插进删掉,还要采用SQL
  上边大家详细介绍了怎样用dsql来查寻数据信息,关键有获得一条纪录和获得好几条纪录2种,接下去大家来啦解下应用dsql别的特点来为大家的test.php添加加上內容和删掉內容的作用.

  先来啦解下插进数据信息库的实际操作,大家先做一个表格,这一表格用以递交数据信息name的.表格编码以下:
hr /
用以递交数据信息的表格: br /
form action= test.php type= post
  input type= hidden name= dopost value= save
  名字: input type= text name= name value=
  input name= 递交 type= submit value= 递交
/form

  这儿大家用了一个掩藏域dopost来储放实际操作方式,键入框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,随后再发送给下一个网页页面
      ShowMsg( 取得成功提升一条纪录內容! , test.php?id={$lastInsertID}
      exit();
    }

  这儿关键是一个INSERT INTO 句子,随后根据$dsql的ExecuteNoneQuery方式来实行这一实际操作,而且获得插进数据信息最终一个id再将其传送给下一个网页页面便于高亮度显示信息.

  大家能够在编写框中插进一总数据来检测下,看一下插进数据信息后的回到結果(图5).

 

(图5)



  实际上删掉的实际操作也是这般,大家只必须略微做下改动便可以了,提升一个dopost实际操作为del的分辨,随后在显示信息数据信息后边提升一个超级链接接,将id以get方法开展传送.并最终开展解决.

  下边就是我们改动循环系统查寻輸出的一部分內容,有以下改动:
      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();
    }
 


  tips:这儿采用了一个ShowMsg()涵数,这一是用于回到一个会话框的,mon.func.php的372行有关涵数的编码.

  这儿大家融合了DedeCMS程序的dedesql类解读了这一类的普遍的使用方法,大家不会太难发觉用这一类实际操作数据信息库是是非非常便捷的,自然这一必须客户对sql较为了解.今日大家就解读到这儿了,下一次有机化学会再融合datalist类和模版模块来详细介绍织梦cms二次开发设计有关的內容.假如大伙儿有哪些好的学习培训织梦cms的建议或提议还期待帮我电邮:(# = @).


三疯源代码官方网手机微信微信公众号二维码 × 开启手机微信,点一下右上方的“法术棒”,挑选“扫一扫”作用,指向正下方二维码就可以。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://dgseoyh.cn/ziyuan/3973.html