`
xieye
  • 浏览: 834839 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

    博客分类:
  • 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}'>&nbsp</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;  background-color:#999999; }
.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;  background-color:#c0c0c0; }
.fieldcolumn {font-family: verdana; color: #000000; font-size: 16px; font-weight: 600; width:550;  background-color:#ffffff; }
.header {background-color: #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;
	background-color:#Eee;
	border:1px #bbb dashed;
    
  }
  #ul2 li a{
    display:block;
    font-size:14px;
    color:#000;

    padding:10px 5px;
    font-weight:bolder;
  }

  #ul2 li:hover {
    background-color:#73B1E0;
  }
  #ul2 li:hover a {
    color:#FFF;
  }

  #div2 {
    clear:both;
	margin:20px;
  }
  .table2 td {
    padding:5px 10px;
  }
  .table2 tr:hover td {
    background-color:#73B1E0;
  }
  .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">&nbsp</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();



效果展示:








  • 大小: 44.5 KB
  • 大小: 50.8 KB
0
0
分享到:
评论

相关推荐

    ECSHOP六脉神剑(开发必看)

    "中冲剑"讲述了ECSHOP的数据字典,这涉及到数据库结构和字段含义,理解数据字典有助于开发者在编写代码时准确地访问和操作数据库。 "关冲剑"则是关于模板使用的简易说明,它教导开发者如何有效地利用模板系统,创建...

    萤火小程序商城源码完整运营版附教程

    8. **bestshop-php后端源码**:这部分源码构成了小程序商城的后端系统,可能使用PHP语言编写,支持处理用户请求、业务逻辑、数据交互等功能。通过阅读源码,开发者可以学习到如何构建高可用性和可扩展性的电商系统。...

    旅游网站的设计与实现.doc

    数据字典详细记录了每个数据项的含义和属性;功能需求明确了用户对网站的具体期望,如搜索、预订、评论等功能;性能需求涉及网站响应速度、并发处理能力等;设计约束可能包括安全性、兼容性、可扩展性等方面的要求。...

    Python How to Program

    元组、列表和字典是Python中三种重要的数据结构,分别用于存储固定序列、可变序列和键值对集合。本章节将深入探讨这些数据结构的特点、操作方法及其适用场景,帮助读者熟练运用它们来处理复杂的数据。 ### CGI介绍 ...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    通过界面模板与代码模板管理功能,可自定义生成程序的界面风格与输出代码,将最大限度提高ASPX/ASP/PHP/JSP等各种程序的编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试(需安装IIS或对应WEB...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    《风越.Net代码生成器 [FireCode Creator]》是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx两种代码框架及多个...

    风越.net代码生成器v2.9

    《风越代码生成器 [FireCode Creator]》是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx WEB程序、.net普通三层...

    风越.net代码生成器 v3.5

    风越.net代码生成器 [FireCode Creator] 是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx WEB程序、.net普通三层...

    风越ASP代码生成器2.8

    内置的.net代码框架,能建立C#语言的.net解决方案,可在VS2005中直接编辑,既能帮助.net初学者快速入门,更可最大限度提高.net程序员的代码编写效率。 01、支持生成的ASPX/ASP/PHP/JSP等页面在本机自动发布、调试...

    风越asp代码生成器 V3.5

    《风越代码生成器 [FireCode Creator]》是一款采用.Net FrameWork2.0框架、基于多种数据库的程序代码生成软件,可快速建立数据信息的:添加、编辑、查看、列表、搜索功能。默认提供asp、aspx WEB程序、.net普通三层...

    ECshop 二次开发六脉神剑

    ECShop的数据字典是指系统中用于存储各种数据和配置信息的数据库表。熟悉这些表结构可以帮助开发者更好地理解系统的工作原理,并为二次开发提供支持。 **1. 数据表概述** ECShop的核心数据表主要包括: - `ecs_...

Global site tag (gtag.js) - Google Analytics