实用的在线预览数据字典的工具(php编写)
无论是刚接手新项目,或者是维护老项目,有一个方便的数据字典可用是最棒哒!
本文是我为了方便使用数据字典而写的代码。
代码无版权,随便使用。
拷贝代码后,只需修改数据库名,主机,用户名,密码,开箱即用。
同时,代码还可以保留自定义的数据字典部分,方便实用。
妈妈再也不用担心我没有好用的数据字典工具了!
源码
全部代码如下,只有一个文件,放在可访问的web目录下即可,附件里也有源码:
tool.php
- <?php
- class Tool
- {
- // 这是库名,需修改。第1处修改
- const dbname='mydb';
- private $mysqli;
- // $db 是数据库连接,需修改使用。第2处修改。
- // // 这里设置主机名,用户名,密码
- public function __construct()
- {
- $this->mysqli = new mysqli('127.0.0.1', 'root', '', self::dbname);
- $sql="set names utf8";
- $this->mysqli->query($sql);
- }
- /**
- * 数据字典生成器
- *
- * 可以从数据库中直接读出数据字典并直接呈现,只需配置好数据库连接。
- * 还可以修改数据库中的内容(或添加上原来数据字典里没有的内容)。
- *
- * 代码可以随意使用和修改。
- *
- * 2017 12 23
- *
- * @author yyy
- */
- public function db_dict ( )
- {
- $db_name = self::dbname; // 这是数据库名
- // 先查出表的元数据,和字段的元数据。
- $sql = "
- select table_name,table_comment from information_schema.tables
- where table_schema='{$db_name}'
- order by table_name asc
- ";
- $table_arr = $this->mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
- // var_dump($table_arr);return;
- $sql = "
- SELECT
- T.TABLE_NAME AS 'table_name',
- T. ENGINE AS 'engine',
- C.COLUMN_NAME AS 'column_name',
- C.COLUMN_TYPE AS 'column_type',
- C.COLUMN_COMMENT AS 'column_comment'
- FROM
- information_schema.COLUMNS C
- INNER JOIN information_schema.TABLES T ON C.TABLE_SCHEMA = T.TABLE_SCHEMA
- AND C.TABLE_NAME = T.TABLE_NAME
- WHERE
- T.TABLE_SCHEMA = '{$db_name}'
- ";
- $column_arr = $this->mysqli->query($sql)->fetch_all(MYSQLI_ASSOC);
- $column_arr = $this->my_comment( $column_arr );
- // 构造表的索引
- $table_list_str = '';
- foreach ($table_arr as $v) {
- $table_list_str .= '<li><a href="#' . $v['table_name'] . '">' .
- $v['table_name'] . "({$v['table_comment']})" . '</a></li>' . "\n";
- }
- // 构造数据字典的内容
- $table_str = '';
- foreach ($table_arr as $v) {
- $table_name = $v['table_name'];
- $table_comment = $v['table_comment'];
- $table_str .= <<<html
- [url=#header][/url]
- <p class='table_jiange'><a name='{$table_name}'> </a>
- <table width="100%" border="0" cellspacing="0" cellpadding="3">
- <tr>
- <td width="70%" class="headtext"
- align="left" valign="top"> {$table_name}({$table_comment})</td>
- <td width="30%" class="headtext"
- align="right"
- > </td>
- <tr>
- </table>
- <table width="100%" cellspacing="0" cellapdding="2" class="table2" >
- <tr>
- <td align="center" width='15%' valign="top" class="fieldcolumn">字段</td>
- <td align="center" width='15%' valign="top" class="fieldcolumn">类型</td>
- <td align="center" width='70%' valign="top" class="fieldcolumn">注释</td>
- </tr>
- html;
- foreach ($column_arr as $vv) {
- if ($vv['table_name'] == $table_name) {
- $table_str .= <<<html
- <tr>
- <td align="left" width='15%' >
- <td align="left" width='15%' ><p class="normal">{$vv['column_type']}</td>
- <td align="left" width='70%' >{$vv['column_comment']}</td>
- </tr>
- html;
- }
- }
- $table_str .= "</table>\n\n";
- }
- // 开始构造整个数据字典的html页面
- $html = <<<html
- <html>
- <head>
- <title>{$db_name}数据字典</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf8">
- <style type="text/css">
- <!--
- .toptext {font-family: verdana; color: #000000; font-size: 20px; font-weight: 600; width:550; }
- .normal { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 16px; font-weight: normal; color: #000000}
- .normal_ul { font-family: Verdana, Arial, Helvetica, sans-serif;
- font-size: 12px; font-weight: normal; color: #000000}
- .fieldheader {font-family: verdana; color: #000000; font-size: 16px; font-weight: 600; width:550; }
- .fieldcolumn {font-family: verdana; color: #000000; font-size: 16px; font-weight: 600; width:550; }
- .header {#ECE9D8;}
- .headtext {font-family: verdana; color: #000000; font-size: 20px; font-weight: 600; }
- BR.page {page-break-after: always}
- //-->
- </style>
- <style>
- a:link{text-decoration:none;}
- a:visited{text-decoration:none;}
- a:active{text-decoration:none;}
- body {
- padding:20px;
- }
- #ul2 {
- margin:0;
- padding:0;
- }
- #ul2 li {
- display:inline;
- float:left;
- margin:5 5px;
- padding:0px 0px;
- width:230px;
- border:1px #bbb dashed;
- }
- #ul2 li a{
- display:block;
- font-size:14px;
- color:#000;
- padding:10px 5px;
- font-weight:bolder;
- }
- #ul2 li:hover {
- }
- #ul2 li:hover a {
- color:#FFF;
- }
- #div2 {
- clear:both;
- margin:20px;
- }
- .table2 td {
- padding:5px 10px;
- }
- .table2 tr:hover td {
- }
- .table2 tr:hover td p{
- color:#FFF;
- }
- .table2 {border-right:1px solid #aaa; border-bottom:1px solid #aaa}
- .table2 td{border-left:1px solid #aaa; border-top:1px solid #aaa}
- .table2 tr:nth-child(even){background:#F4F4F4;}
- .headtext {
- padding:10px;
- }
- p.pa{
- color:blue;
- }
- .table_jiange{
- height:1px;
- margin:20px;
- padding:0;
- }
- </style>
- </head>
- <body bgcolor='#ffffff' topmargin="0">
- <table width="100%" border="0" cellspacing="0" cellpadding="5">
- <tr>
- <td class="toptext"><p align="center">{$db_name}数据字典</td>
- </tr>
- </table>
- <a name="header"> </a>
- <ul id='ul2'>
- {$table_list_str}
- </ul>
- <div id="div2"></div>
- <br class=page>
- {$table_str}
- [url=#header]<p class="normal">回到首页[/url]
- <h1 width="100%">
- </body>
- </html>
- html;
- mysqli_close($this->mysqli);
- echo $html;
- }
- /**
- * 自定义注释,可以完美覆盖表中的注释。
- *
- 这里的account 表,id字段,只是示例,可以替换成你的表名和字段名。
- * @return string[][]
- */
- private function my_comment_list ( )
- {
- $arr = [
- [
- 'table_name' => 'account',
- 'column_name' => 'id',
- 'column_comment' => '自增主键'
- ],
- [
- 'table_name' => 'account',
- 'column_name' => 'cid',
- 'column_comment' => '栏目id'
- ],
- ];
- return $arr;
- }
- private function my_comment ( $arr )
- {
- $my_table = $this->my_comment_list( );
- foreach ($arr as $k => &$v) {
- foreach ($my_table as $my) {
- if ($v['table_name'] == $my['table_name'] &&
- $v['column_name'] == $my['column_name']) {
- $v['column_comment'] = $my['column_comment'];
- }
- }
- }
- return $arr;
- }
- }
- $dict = new Tool();
- $dict->db_dict();
效果展示:


实用的在线预览数据字典的工具(php编写)的更多相关文章
- 网页嵌入pdf、在线预览pdf工具及插件(转)
摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如下: 代码片段1: 1 <object ty ...
- 在线预览-Java 使用 Print2Flash 实现Office文档在线阅读
近期项目上遇到一个需求是用户上传的文档进行在线浏览,之前有过一篇使用 OpenOffice 将 word 转换成 html 页面进行展示的.现在介绍一个新的工具那就是 Print2Flash . ...
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
引言 之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询. 方案一 直接在浏览器中打开Office文档在页面上的链接.会弹出如下窗口: 优点:主流浏览器都支持. 缺点: ...
- 实战动态PDF在线预览及带签名的PDF文件转换
开篇语: 最近工作需要做一个借款合同,公司以前的合同都是通过app端下载,然后通过本地打开pdf文件,而喜欢创新的我,心想着为什么不能在线H5预览,正是这个想法,说干就干,实践过程总是艰难的,折腾了3 ...
- Office文档在线预览
工具说明:通过传入文档的Web地址,即可进行Office文档的在线预览. 使用方式: 在http://office.qingshanboke.com地址后,通过url参数传入您想预览的文件路径. 如: ...
- 在线预览Office文件【效果类似百度文库】
引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好. 提到Offic ...
- FlexPaper+SWFTool+操作类=在线预览PDF
引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf转换为swf格式的文件预览的,所以flexpaper一般和swf ...
- 关于在线预览word,excel,ppt,pdf的需求处理方法。
参考文档:http://www.cnblogs.com/wolf-sun/p/3574278.html 我选用的方案:先用office com组件生成pdf,然后使用pdf.js在线预览pdf文档.在 ...
- Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现
笔者最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载.笔者想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash ...
随机推荐
- 学习笔记:Python序列化常用工具及性能对比
什么叫序列化?简单来讲就是将内存中的变量数据转而存储到磁盘上或是通过网络传输到远程. 反序列化是指:把变量数据从序列化的对象重新读到内存里. 下面我们一起来看看,python里面序列化常用的json. ...
- Linux学习笔记(六)Linux常用命令:关机、重启以及系统运行级别
一.shutdown命令 shutdown [选项] [时间] 常用选项 -c 取消前一个关机命令 -h 关机 -r 重启 shutdown命令关机或重启会保存当前系统正在使用的资源,因此关机或重启最 ...
- STM32窗口看门狗WWDG库函数的一点思考
WWDG当前计数器的值以及激活位和WWDG_CR这个寄存器相关.如下图所示: 而STM32f10x的库函数提供了两种设置WWDG_CR[0:6]位的方式. WWDG_SetCounter方法 #def ...
- 用js刷剑指offer(反转链表)
题目描述 输入一个链表,反转链表后,输出新链表的表头. 牛客网链接 js代码 /*function ListNode(x){ this.val = x; this.next = null; }*/ f ...
- Spring的使用及Spring3.2控制器增强@ControllerAdvice
在xml配置了这个标签后,spring可以自动去扫描base-pack下面或者子包下面的java文件,如果扫描到有@Component. @Controller.@Service等这些注解的类,则把这 ...
- linux(3)
一.用户和组的管理 Linux/Unix是多用户系统: root是超级用户,拥有最高权限.其它用户及权限由root来管理.对比Windows系统: 控制面板 -> 管理工具 -> 计算机管 ...
- Python 类和对象(2)
上文讲到 类 = 属性 + 方法 今天来讲一下方法里常见的一个特殊的方法: 名字叫 __init__ 的构造方法 1.特殊的方法 :__init__ 该方法在我们实例化类的时候,python就自动调用 ...
- 接口自动化平台搭建(二),搭建django项目与接口自动化平台的由来与功能特征
1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下: django-admin startproject my_djang ...
- Java并发包--线程池框架
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3509903.html 线程池架构图 线程池的架构图如下: 1. Executor 它是"执行者 ...
- jQuery获取父窗口的元素
js获取父页面的元素可以用 $(window.parent.document).find("#customer_id").val();这里的customer_id表示父页面某一个元 ...