PHP导出MySQL数据字典

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 2017年11月9日09:30:29 用 PHP mysqli 写的一个类文件, 用来导出MySQL数据字典 导出表信息; 字段信息, 索引信息 可以导出浏览器适用的样式, 也可以导出word文档(默认720px)宽度,字体10px 建议上线前用这个导出一份, 整体过一遍, 防止有些字段, not null, 索引等设置不到位的情况 https://gitee.

2017年11月9日09:30:29

用 PHP mysqli 写的一个类文件, 用来导出MySQL数据字典

导出表信息; 字段信息, 索引信息

可以导出浏览器适用的样式, 也可以导出word文档(默认720px)宽度,字体10px

建议上线前用这个导出一份, 整体过一遍, 防止有些字段, not null, 索引等设置不到位的情况

https://gitee.com/myDcool/PHP-DBDIC

 

用法:

1 include('./DBdic.php');
2 
3 //浏览器显示
4 DBdic::ini('localhost', 'db_name', 'username', 'password')->outForBrowser();
5 
6 //下载word文档
7 DBdic::ini('localhost', 'db_name', 'username', 'password')->outForWord();

 

 

  1 <?php
  2 /**
  3  * 生成mysql数据字典
  4  */
  5 class DBdic
  6 {
  7     public $database = array(); //数据库配置
  8     public $tables = array(); //读取的表信息数组
  9     public $htmlTable = ''; //表格内容
 10     public $html = '';
 11     
 12     public static function ini($host, $dbname, $user, $pwd)
 13     {
 14         return new self($host, $dbname, $user, $pwd);
 15     }
 16     
 17     function __construct($host, $dbname, $user, $pwd)
 18     {
 19         // 配置数据库
 20         $this->database['DB_HOST'] = $host;
 21         $this->database['DB_NAME'] = $dbname;
 22         $this->database['DB_USER'] = $user;
 23         $this->database['DB_PWD'] = $pwd;
 24     
 25         //链接MySQL
 26         $mysqli = mysqli_init();
 27         $mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 2); //超时2s
 28         $mysqli->options(MYSQLI_INIT_COMMAND, "set names utf8mb4;");
 29         $mysqli->real_connect($this->database['DB_HOST'], $this->database['DB_USER'], $this->database['DB_PWD'], $this->database['DB_NAME']) or die("Mysql connect is error.");
 30     
 31         // 取得所有表名
 32         $rs = $mysqli->query('show tables');
 33         $arrTableName = array_column($rs->fetch_all(), $value=0);
 34 
 35         // 取得所有表信息
 36         foreach ($arrTableName as $name) {
 37         
 38             //表注释
 39             $sql = "select * from information_schema.tables where table_schema = '{$this->database['DB_NAME']}' and table_name = '{$name}' "; //查询表信息
 40             $rs = $mysqli->query($sql);
 41             $arrTableInfo = $rs->fetch_assoc();
 42         
 43             //各字段信息
 44             $sql = "select * from information_schema.columns where table_schema ='{$this->database['DB_NAME']}' and table_name = '{$name}' "; //查询字段信息
 45             $rs = $mysqli->query($sql);
 46             $arrColumnInfo = $rs->fetch_all(MYSQLI_ASSOC);
 47         
 48             //索引信息
 49             $sql = "show index from {$name}";
 50             $rs = $mysqli->query($sql);
 51             $arrIndexInfo = $rs->fetch_all(MYSQLI_ASSOC);
 52         
 53             $this->tables[] = array(
 54                 'TABLE' => $arrTableInfo,
 55                 'COLUMN' => $arrColumnInfo,
 56                 'INDEX' => $this->getIndexInfo($arrIndexInfo)
 57             );
 58         }
 59     
 60         //组装HTML
 61         $html = '';
 62         foreach($this->tables as $v)
 63         {
 64             $html .= '<table border="1" cellspacing="0" cellpadding="0" align="center">';
 65             $html .= '<caption>' . $v['TABLE']['TABLE_NAME'] . ' ' . $v['TABLE']['TABLE_COMMENT'] . '</caption>';
 66             $html .= '<tbody><tr><th>字段名</th><th>数据类型</th><th>默认值</th><th>允许非空</th><th>索引/自增</th><th>备注(字段数: '. count($v['COLUMN']).')</th></tr>';
 67         
 68             foreach ($v['COLUMN'] AS $f) {
 69                 $html .= '<tr>';
 70                 $html .= '<td class="c1">' . $f['COLUMN_NAME']      . '</td>';
 71                 $html .= '<td class="c2">' . $f['COLUMN_TYPE']      . '</td>';
 72                 $html .= '<td class="c3">' . $f['COLUMN_DEFAULT']   . '</td>';
 73                 $html .= '<td class="c4">' . $f['IS_NULLABLE']      . '</td>';
 74                 $html .= '<td class="c5">' . $f['COLUMN_KEY'].' '.$f['EXTRA']. '</td>';
 75                 $html .= '<td class="c6">' . $f['COLUMN_COMMENT']   . '</td>';
 76                 $html .= '</tr>';
 77             }
 78             $html .= '</tbody></table>';
 79         
 80             $html .= '<table style="border-top:hidden"  cellspacing="0" cellpadding="0" align="center">';
 81             $html .= '<tr><th>索引名</th><th>索引顺序</th></tr>';
 82             foreach ($v['INDEX'] as $indexName => $indexContent) {
 83                 $html .= '<tr>';
 84                 $html .= '<td class="c7">' . $indexName . '</td>';
 85                 $html .= '<td>' . implode('; ', $indexContent) . '</td>';
 86                 $html .= '</tr>';
 87             }
 88             $html .= '</table><br>';
 89         }
 90         $this->htmlTable = $html;
 91     }
 92     
 93     //整合单个表的所有索引(将复合索引归纳到一起)
 94     function getIndexInfo($arrIndexInfo)
 95     {
 96         $index = array();
 97         foreach ($arrIndexInfo as $v) {
 98             $unique = ($v['Non_unique'] == 0) ? '(unique)' : '';
 99             $index[$v['Key_name']][] = $v['Seq_in_index'].': '.$v['Column_name'].$unique;
100         }
101         
102         return $index;
103     }
104     
105     //输出到浏览器, 表格宽度用百分比
106     function outForBrowser()
107     {
108         header("Content-type:text/html;charset=utf-8");
109         $html = '<html>
110               <meta charset="utf-8">
111               <title>自动生成数据字典</title>
112               <style>
113                 body,td,th {font-family:"宋体"; font-size:14px;}
114                 table,h1,p{width:80%;margin:0px auto;}
115                 table{border-collapse:collapse;border:1px solid #CCC;background:#efefef;}
116                 table caption{text-align:left; background-color:#fff; line-height:2em; font-size:14px; font-weight:bold; }
117                 table th{text-align:left; font-weight:bold;height:26px; line-height:26px; font-size:14px; border:1px solid #CCC;padding-left:5px;}
118                 table td{height:20px; font-size:14px; border:1px solid #CCC;background-color:#fff;padding-left:5px;}
119                 .c1{ width: 10%;}
120                 .c2{ width: 10%;}
121                 .c3{ width: 5%;}
122                 .c4{ width: 5%;}
123                 .c5{ width: 10%;}
124                 .c6{ width: 60%;}
125                 .c7{ width: 10%;}
126               </style>
127               <body>';
128         $html .= '<h1 style="text-align:center;">'.$this->database['DB_NAME'].'数据字典</h1>';
129         $html .= '<p style="text-align:center;margin:20px auto;">生成时间:' . date('Y-m-d H:i:s') . '  总共:' . count($this->tables) . '个数据表</p>';
130         $html .= $this->htmlTable;
131         $html .= '</body></html>';
132         
133         $this->html = $html;
134         echo $html;
135         // return $this;
136     }
137     
138     //输出到word文档, 固定宽度为720px
139     function outForWord()
140     {
141         /* 生成word */
142         header("Content-type:text/html;charset=utf-8");
143         header( "Content-type:application/vnd.ms-word" );
144         header( "Content-Disposition:attachment;filename={$this->database['DB_NAME']}数据字典.doc" );
145     
146         $html = '<html>
147               <meta charset="utf-8">
148               <title>自动生成数据字典</title>
149               <style>
150                 body,td,th {font-family:"宋体"; font-size:14px;}
151                 table,h1,p{width:720px;margin:0px auto;}
152                 table{border-collapse:collapse;border:1px solid #CCC;background:#efefef;}
153                 table caption{text-align:left; background-color:#fff; line-height:2em; font-size:14px; font-weight:bold; }
154                 table th{text-align:left; font-weight:bold;height:20px; line-height:20px; font-size:11px; border:1px solid #CCC;padding-left:5px;}
155                 table td{height:20px; font-size:11px; border:1px solid #CCC;background-color:#fff;padding-left:5px;}
156                 .c1{ width: 100px;}
157                 .c2{ width: 110px;}
158                 .c3{ width: 50px;}
159                 .c4{ width: 55px;}
160                 .c5{ width: 100px;}
161                 .c6{ width: 300px;}
162                 .c7{ width: 200px;}
163               </style>
164               <body>';
165         $html .= '<h1 style="text-align:center;">'.$this->database['DB_NAME'].'数据字典</h1>';
166         $html .= '<p style="text-align:center;margin:20px auto;">生成时间:' . date('Y-m-d H:i:s') . '  总共:' . count($this->tables) . '个数据表</p>';
167         $html .= $this->htmlTable;
168         $html .= '</body></html>';
169         
170         $this->html = $html;
171         echo $html;
172         // return $this;
173     }
174     
175     function out()
176     {
177         // echo $this->html;
178     }
179     
180 }
View Code

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实践指南####
深入探索PHP与MySQL结合的魅力,本文旨在通过一系列实战案例,揭示如何高效构建动态交互式网站。从环境搭建到代码实现,全方位解析两者协同工作的原理与技巧,为开发者提供一条清晰的学习路径。 ####
|
13天前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
32 3
|
20天前
|
关系型数据库 MySQL 数据库连接
13 PHP数据的获取
路老师在知乎上分享了PHP语言的知识,帮助大家入门和深入理解PHP。本文介绍了从结果集中获取一行数据作为对象(`mysqli_fetch_object()`)、获取一行作为枚举数组(`mysqli_fetch_row()`)、获取查询结果集中的记录数(`mysqli_num_rows()`)、释放内存(`mysqli_free_result()`)以及关闭数据库连接(`mysqli_close()`)的方法,并提供了具体示例代码。
27 3
|
20天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
25天前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
26天前
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
本文深入探讨了PHP与MySQL在动态网站开发中的应用实践,通过具体案例解析如何高效结合这两大技术构建数据驱动的Web应用。文章将涵盖环境搭建、基础语法回顾、数据库设计与操作、用户注册与登录系统实现等关键步骤,旨在为开发者提供一个从零到一的项目实战路径,展示PHP与MySQL协同工作的强大能力。 ####
|
27天前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
2月前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
3月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
3月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
152 9