zoukankan      html  css  js  c++  java
  • 实用的在线预览数据字典的工具(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();  


    效果展示: 








  • 相关阅读:
    MySQL limit 分页查询优化(百万级优化)
    HAVING 搜索条件在进行分组操作之后应用
    Mysql 多表连接查询 inner join 和 outer join 的使用
    php7 configure: error: Cannot find OpenSSL's <evp.h> 问题解决
    解决Cannot find config.m4 Make sure that you run '/home/php/bin/phpize' in the top level source directory of the module
    Ubuntu下彻底卸载默认安装的mysql,自己手动下载安装MYSQL
    mysql 运算操作符
    mysql 函数表
    【mysql】连接和断开服务器
    mysql 5.7 增删改查及别名的用法
  • 原文地址:https://www.cnblogs.com/apolloren/p/9937410.html
Copyright © 2011-2022 走看看