前言

无论是刚接手新项目,或者是维护老项目,有一个方便的数据字典可用是最棒哒! 
本文是我为了方便使用数据字典而写的代码。 
代码无版权,随便使用。

拷贝代码后,只需修改数据库名,主机,用户名,密码,开箱即用。 
同时,代码还可以保留自定义的数据字典部分,方便实用。 
妈妈再也不用担心我没有好用的数据字典工具了!

源码 
全部代码如下,只有一个文件,放在可访问的web目录下即可,附件里也有源码: 
tool.php

  1. <?php
  2. class Tool
  3. {
  4. // 这是库名,需修改。第1处修改
  5. const dbname='mydb';
  6. private $mysqli;
  7. // $db 是数据库连接,需修改使用。第2处修改。
  8. // // 这里设置主机名,用户名,密码
  9. public function __construct()
  10. {
  11. $this->mysqli = new mysqli('127.0.0.1', 'root', '', self::dbname);
  12. $sql="set names utf8";
  13. $this->mysqli->query($sql);
  14. }
  15. /**
  16. * 数据字典生成器
  17. *
  18. * 可以从数据库中直接读出数据字典并直接呈现,只需配置好数据库连接。
  19. * 还可以修改数据库中的内容(或添加上原来数据字典里没有的内容)。
  20. *
  21. * 代码可以随意使用和修改。
  22. *
  23. * 2017 12 23
  24. *
  25. * @author yyy
  26. */
  27. public function db_dict ( )
  28. {
  29. $db_name = self::dbname; // 这是数据库名
  30. // 先查出表的元数据,和字段的元数据。
  31. $sql = "
  32. select table_name,table_comment from information_schema.tables
  33. where table_schema='{$db_name}'
  34. order by table_name asc
  35. ";
  36. $table_arr = $this->mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
  37. // var_dump($table_arr);return;
  38. $sql = "
  39. SELECT
  40. T.TABLE_NAME AS 'table_name',
  41. T. ENGINE AS 'engine',
  42. C.COLUMN_NAME AS 'column_name',
  43. C.COLUMN_TYPE AS 'column_type',
  44. C.COLUMN_COMMENT AS 'column_comment'
  45. FROM
  46. information_schema.COLUMNS C
  47. INNER JOIN information_schema.TABLES T ON C.TABLE_SCHEMA = T.TABLE_SCHEMA
  48. AND C.TABLE_NAME = T.TABLE_NAME
  49. WHERE
  50. T.TABLE_SCHEMA = '{$db_name}'
  51. ";
  52. $column_arr = $this->mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
  53. $column_arr = $this->my_comment( $column_arr );
  54. // 构造表的索引
  55. $table_list_str = '';
  56. foreach ($table_arr as $v) {
  57. $table_list_str .= '<li><a href="#' . $v['table_name'] . '">' .
  58. $v['table_name'] . "({$v['table_comment']})" . '</a></li>' . "\n";
  59. }
  60. // 构造数据字典的内容
  61. $table_str = '';
  62. foreach ($table_arr as $v) {
  63. $table_name = $v['table_name'];
  64. $table_comment = $v['table_comment'];
  65. $table_str .= <<<html
  66. [url=#header][/url]
  67. <p class='table_jiange'><a name='{$table_name}'>&nbsp</a>
  68. <table width="100%" border="0" cellspacing="0" cellpadding="3">
  69. <tr>
  70. <td  width="70%"  class="headtext"
  71. align="left" valign="top"> {$table_name}({$table_comment})</td>
  72. <td  width="30%" class="headtext"
  73. align="right"
  74. > </td>
  75. <tr>
  76. </table>
  77. <table width="100%" cellspacing="0" cellapdding="2" class="table2" >
  78. <tr>
  79. <td align="center" width='15%' valign="top" class="fieldcolumn">字段</td>
  80. <td align="center" width='15%' valign="top" class="fieldcolumn">类型</td>
  81. <td align="center" width='70%'  valign="top" class="fieldcolumn">注释</td>
  82. </tr>
  83. html;
  84. foreach ($column_arr as $vv) {
  85. if ($vv['table_name'] == $table_name) {
  86. $table_str .= <<<html
  87. <tr>
  88. <td align="left"  width='15%' >
  89. <td align="left"  width='15%' ><p class="normal">{$vv['column_type']}</td>
  90. <td align="left"  width='70%' >{$vv['column_comment']}</td>
  91. </tr>
  92. html;
  93. }
  94. }
  95. $table_str .= "</table>\n\n";
  96. }
  97. // 开始构造整个数据字典的html页面
  98. $html = <<<html
  99. <html>
  100. <head>
  101. <title>{$db_name}数据字典</title>
  102. <meta http-equiv="Content-Type" content="text/html; charset=utf8">
  103. <style type="text/css">
  104. <!--
  105. .toptext {font-family: verdana; color: #000000; font-size: 20px; font-weight: 600; width:550;   }
  106. .normal {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; font-weight: normal; color: #000000}
  107. .normal_ul {  font-family: Verdana, Arial, Helvetica, sans-serif;
  108. font-size: 12px; font-weight: normal; color: #000000}
  109. .fieldheader {font-family: verdana; color: #000000; font-size: 16px; font-weight: 600; width:550;   }
  110. .fieldcolumn {font-family: verdana; color: #000000; font-size: 16px; font-weight: 600; width:550;   }
  111. .header {#ECE9D8;}
  112. .headtext {font-family: verdana; color: #000000; font-size: 20px; font-weight: 600;    }
  113. BR.page {page-break-after: always}
  114. //-->
  115. </style>
  116. <style>
  117. a:link{text-decoration:none;}
  118. a:visited{text-decoration:none;}
  119. a:active{text-decoration:none;}
  120. body {
  121. padding:20px;
  122. }
  123. #ul2 {
  124. margin:0;
  125. padding:0;
  126. }
  127. #ul2 li {
  128. display:inline;
  129. float:left;
  130. margin:5 5px;
  131. padding:0px 0px;
  132. width:230px;
  133. border:1px #bbb dashed;
  134. }
  135. #ul2 li a{
  136. display:block;
  137. font-size:14px;
  138. color:#000;
  139. padding:10px 5px;
  140. font-weight:bolder;
  141. }
  142. #ul2 li:hover {
  143. }
  144. #ul2 li:hover a {
  145. color:#FFF;
  146. }
  147. #div2 {
  148. clear:both;
  149. margin:20px;
  150. }
  151. .table2 td {
  152. padding:5px 10px;
  153. }
  154. .table2 tr:hover td {
  155. }
  156. .table2 tr:hover td p{
  157. color:#FFF;
  158. }
  159. .table2 {border-right:1px solid #aaa; border-bottom:1px solid #aaa}
  160. .table2  td{border-left:1px solid #aaa; border-top:1px solid #aaa}
  161. .table2 tr:nth-child(even){background:#F4F4F4;}
  162. .headtext {
  163. padding:10px;
  164. }
  165. p.pa{
  166. color:blue;
  167. }
  168. .table_jiange{
  169. height:1px;
  170. margin:20px;
  171. padding:0;
  172. }
  173. </style>
  174. </head>
  175. <body bgcolor='#ffffff' topmargin="0">
  176. <table width="100%" border="0" cellspacing="0" cellpadding="5">
  177. <tr>
  178. <td class="toptext"><p align="center">{$db_name}数据字典</td>
  179. </tr>
  180. </table>
  181. <a name="header">&nbsp</a>
  182. <ul id='ul2'>
  183. {$table_list_str}
  184. </ul>
  185. <div id="div2"></div>
  186. <br class=page>
  187. {$table_str}
  188. [url=#header]<p class="normal">回到首页[/url]
  189. <h1 width="100%">
  190. </body>
  191. </html>
  192. html;
  193. mysqli_close($this->mysqli);
  194. echo $html;
  195. }
  196. /**
  197. * 自定义注释,可以完美覆盖表中的注释。
  198. *
  199. 这里的account 表,id字段,只是示例,可以替换成你的表名和字段名。
  200. * @return string[][]
  201. */
  202. private function my_comment_list ( )
  203. {
  204. $arr = [
  205. [
  206. 'table_name' => 'account',
  207. 'column_name' => 'id',
  208. 'column_comment' => '自增主键'
  209. ],
  210. [
  211. 'table_name' => 'account',
  212. 'column_name' => 'cid',
  213. 'column_comment' => '栏目id'
  214. ],
  215. ];
  216. return $arr;
  217. }
  218. private function my_comment ( $arr )
  219. {
  220. $my_table = $this->my_comment_list( );
  221. foreach ($arr as $k => &$v) {
  222. foreach ($my_table as $my) {
  223. if ($v['table_name'] == $my['table_name'] &&
  224. $v['column_name'] == $my['column_name']) {
  225. $v['column_comment'] = $my['column_comment'];
  226. }
  227. }
  228. }
  229. return $arr;
  230. }
  231. }
  232. $dict = new Tool();
  233. $dict->db_dict();

效果展示:

实用的在线预览数据字典的工具(php编写)的更多相关文章

  1. 网页嵌入pdf、在线预览pdf工具及插件(转)

    摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如下: 代码片段1: 1 <object ty ...

  2. 在线预览-Java 使用 Print2Flash 实现Office文档在线阅读

    近期项目上遇到一个需求是用户上传的文档进行在线浏览,之前有过一篇使用 OpenOffice 将 word 转换成 html 页面进行展示的.现在介绍一个新的工具那就是 Print2Flash .    ...

  3. [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!

    引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...

  4. 实战动态PDF在线预览及带签名的PDF文件转换

    开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...

  5. Office文档在线预览

    工具说明:通过传入文档的Web地址,即可进行Office文档的在线预览. 使用方式: 在http://office.qingshanboke.com地址后,通过url参数传入您想预览的文件路径. 如: ...

  6. 在线预览Office文件【效果类似百度文库】

    引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好. 提到Offic ...

  7. FlexPaper+SWFTool+操作类=在线预览PDF

    引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...

  8. 关于在线预览word,excel,ppt,pdf的需求处理方法。

    参考文档:http://www.cnblogs.com/wolf-sun/p/3574278.html 我选用的方案:先用office com组件生成pdf,然后使用pdf.js在线预览pdf文档.在 ...

  9. Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现

    笔者最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载.笔者想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash ...

随机推荐

  1. mysql中FIND_IN_SET()和GROUP_CONCAT()的使用

    知识点:mysql中FIND_IN_SET和GROUP_CONCAT()的使用 (一) 场景:当我们使用mysql数据库,查询一张的数据,其中的一列存放的是是另一张表id用“,”拼接的字符串 如下图所 ...

  2. C# 之 .net core -- MVC模式的显示、增、删、改

    上一篇介绍数据的创建连接,接下来就是基本的增删改 一.右键添加.控制器 二.选择这个带试图的 三.其他的不要动,点击添加 四.执行一下,改下url 试一下他的增删改. 其实自己写的话可以用form表单 ...

  3. Dapper+Mysql 使用LIKE模糊查询写法踩坑

    LIKE '%@Title%' 会解析成'%'@Title'%' 这里用拼接也是不行的'%'+@Title+'%' 只能用MySQL函数方法拼接 public dynamic GetListByFil ...

  4. SpringBoot + MySQL + MyBatis 整合 Redis 实现缓存操作

    本地安装 Redis Redis 安装:https://www.cnblogs.com/oukele/p/11373052.html 项目结构:  SpringBootRedis 工程项目结构如下: ...

  5. 关于EMF中从schema到ecore转变中的默认处理问题

    以前的工作,建模基本都是通过ecore tool直接画ecore的模型图来完成,最近要从schema创建ecore文件,本来以为是非常简单的一件事情,使用向导创建genmodel,然后从xsd文件导入 ...

  6. mongodb中find $ne null 与$exists的区别

    $ne null 会把空列表也算入,即使不存在. $exists 的识别效果就比较好 1.插入样例数据 db.nullexistsdemo.insertMany( [{ "name" ...

  7. VMware WorkStations最小化安装&配置&卸载CentOS 7

    所需软件: VMware WorkStations,CentOS 7镜像文件(可以在CentOS官网下载) 1.打开VMware WorkStations,点击创建虚拟机 2.选择典型,点击下一步 3 ...

  8. Shiro 中的 SecurityUtils(转)

    在 Shiro 中 SecurityUtils 是一个抽象类.并且没有任何子类.在其中声明了一个静态属性,三个静态方法. 静态属性 securityManager private static Sec ...

  9. springboot2.0入门(六)-- ymal语法、数据校验

    一.基本使用 1.ymal语法是一种更符合人类命名习惯的语法: # 1. 一个家庭有爸爸.妈妈.孩子. # 2. 这个家庭有一个名字(family-name)叫做“happy family” # 3. ...

  10. docker的网络服务

    docker提供 网络服务,主要通过两种方式: 1.外部访问 2.容器互联 通过外部访问Docker容器,主要通过端口映射的方式. [root@docker ~]# docker run -t -P ...