欢迎访问织梦学习网,加群!!!!!!!!!!!!!!!!
当前位置:主页 > 二次开发 >

织梦SQL命令执行器分析

2018-04-18 dedecms二次开发 织梦,SQL,命令,执行,器,分析,织梦,sql,命令,
  dedestudy.cn/' target='_blank'>织梦sql命令执行器是一个对于学习sql语言的朋友来说,是一个非常小巧而实用的工具,如果精通sql的话,那么,我们直接不用phpadmin或数据库查看工具,查看数据库表信息了,直接用这个工具,除了不能删除数据库和数据库表外,其它,所有sql命令都可以在这里实现,也就是我们要看查看表、创建表、修改表、优化表、更新表等等操作都可以用这个命令执行器来实现。

  命令执行器位置:织梦后台——>系统——>SQL命令行工具,如下图所示。



  这个sql命令执行器,实际上分二个大功能,一个是上面的对系统表进行优化、修复和查看表结构,实现对表的宏观操作,并没有操作表的具体值;下面是查询这个表里面的字段值,就是查询表里面的具体内容,主要通过sql,当然,还可以更新表、修改表等,还可以从更宏观的角度来操作表,甚至是操作数据库,例如,创建数据库,创建表等操作。

  下面我们主要分析织梦的这上面和下面二个功能的实现。

  实现原理:无论我们是用上面的修复表、优化表还是下面的单行或多行查询表,它们的原理都是一样的。例如,当我们点击修复表时,这时就会把修复命令传到程序文件sys_sql_query.php(这个是处理这个命令执行器的程序,对应的模板是sys_sql_query.htm),然后,通过执行sql修复表语句:REPAIR TABLE `$tablename`(这个表名是我们在点修复前,选择中的要修复的表),进行修复操作,修复完后,返回成功信息。

  这个修复功能的实现跟下面的sql语句的执行(例如,查询表)原理是完全一样。举例:如果我们要查询主表中的标题,首先,选中执行的类型,即可单行执行还是多行,然后,我们就可以在下面的写入sql语句:select title from dede_archives,当我们点击确定后,通过表单把这条sql查询语句,传送程序文件sys_sql_query.php里面,然后,程序就会执行这查询语句,成功后,返回成功信息。出错时返回出错信息。其它语句的查询也是如此,大同小异。

  这些功能的实现,都是通过把表单提交给程序文件sys_sql_query.php来实现的,正常情况下,如果我们提交表单,都是会转到程序文件sys_sql_query.php这个路径(在地址栏,我们会看到变化)下面,来显示结果,但是在这个命令执行器里面,我们发现,无论执行什么样的命令,都在“返回信息”这个区域显示,这是这个教程里面的另一个技巧。

  这个小小的功能是如何实现的?我们打开模板文件sys_sql_query.htm,我们发现有二个表单,为了方便讲解,把不必要的表单内容删掉后,如下:

表单一、    <form action="sys_sql_query.php" method="post" name="infoform" target="stafrm">
          <input type='hidden' name='dopost' value='viewinfo' />
 
          <td height="200" align="center">返回信息:</td>
            <td> <iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe></td></tr>
    </form>


表单二、<form action="sys_sql_query.php" method="post" name="form1" target="stafrm"></form>

  上面的二个表单,里面都有target="stafrm",第一个表单里面有一个框架<iframe name="stafrm" frameborder="0" id="stafrm" width="100%" height="100%"></iframe>,这个框架就是显示返回信息用的,我们看这个框架里面name值是stafrm,正好是表单target="stafrm"的值。

  在表单里面target="stafrm" 意思是提交表单给action="sys_sql_query.php"后,显示的内容在哪里,target="stafrm"里面的值stafrm正是框架里面name的值,意思就是sys_sql_query.php处理表单住处后,要在框架这一块显示返回的内容,这一小技巧应用非常广,例如有时候,我们看到一个网站上有一个功能,例如调查问卷,在线测试等,当点提交的时候,当前的页面没有动,结果,当前页面显示出来的结果,很多都是用框架实现的。当然,这个用jquery也能实现这样的看上去无刷新页面,就可以看到结果的效果。

  分析命令处理器文件sys_sql_query.php:

  打开文件sys_sql_query.php,在第二行有这么一句,这是用来检测用户权限的CheckPurview('sys_Data'),以后我们做织梦二次开发时,也可以用这个权限技巧,来达到让不同的用户进行不同的操作,例如,本例中,如果你是用信息发布员身份进入后台的,那么,你就不没有这个权限进行sql操作了。

  接下来的代码就把“修复选中表、修复全部表、优化选中表、优化全部表和查看表结构”,进行分别处理代码。当我们点后面的按扭时,例如点击“查看表结构”,即模板里面对应代码:<input type="Submit" name="Submit3"value="查看表结构" onClick="this.form.dopost.value='viewinfo'; " />,这个按扭代码里面,通过js鼠标事件onClick,把键值对dopost=viewinfo传到了,这个表单action里面的sys_sql_query.php文件,然后,由这个文件里面的 $dsql->SetQuery("SHOW CREATE TABLE ".$dsql->dbName.".".$tablename)这句,设置sql代码,进行查询。然后,再把结果返回给模板里面的框架,然后,我们在点“查看表结构”后,就在“返回信息”那一块看到了返回的结果。

  其它四按扭功能都跟这个完全一样,唯一不一样的就是处理的sql语句。关于sql语句,如果不会大家可以查询一下手册。下面的命令执行行,跟这个原里完全一样,不一样的是除了sql外,还有提交方式是点下面的“确定”,其实,跟上面五个按扭一样,这个确定也是一个按扭,只不过是上面的文字不一样。