实用的在线预览数据字典的工具(php编写)

前言 

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

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

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


效果展示: 








原文地址:https://www.cnblogs.com/apolloren/p/9937410.html