<?php

/**
* 生成mysql数据字典
*/ //数据库配置
$config = [
'host' => '192.168.43.134',
'user' => 'root',
'password' => '111111',
]; function characet($data){
if( !empty($data) ){
$fileType = mb_detect_encoding($data , array('UTF-8','GBK','LATIN1','BIG5')) ;
if( $fileType != 'UTF-8'){
$data = mb_convert_encoding($data ,'utf-8' , $fileType);
}
}
return $data;
} function export_dict($dbname, $config) {
$title = $dbname.' 数据字典';
$dsn = 'mysql:dbname='.$dbname.';host='.$config['host'];
//数据库连接
try {
$con = new PDO($dsn, $config['user'], $config['password'], [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
} $con->query('SET NAMES utf8');
$tables = $con->query('SHOW tables')->fetchAll(PDO::FETCH_COLUMN); //取得所有的表名
foreach ($tables as $table) {
$_tables[]['TABLE_NAME'] = $table;
} //循环取得所有表的备注及表中列消息
foreach ($_tables as $k => $v) { $sql = 'SELECT * FROM ';
$sql .= 'INFORMATION_SCHEMA.TABLES ';
$sql .= 'WHERE ';
$sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$dbname}'";
$tr = $con->query($sql)->fetch(PDO::FETCH_ASSOC);
$_tables[$k]['TABLE_COMMENT'] = $tr['TABLE_COMMENT']; $sql = 'SELECT * FROM ';
$sql .= 'INFORMATION_SCHEMA.COLUMNS ';
$sql .= 'WHERE ';
$sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$dbname}'";
$fields = [];
$field_result = $con->query($sql)->fetchAll(PDO::FETCH_ASSOC); foreach ($field_result as $fr)
{
$fields[] = $fr;
}
$_tables[$k]['COLUMN'] = $fields;
}
unset($con); $mark = ''; //循环所有表
foreach ($_tables as $k => $v) { $mark .= '## '.$v['TABLE_NAME'].' '. characet($v['TABLE_COMMENT']) .PHP_EOL;
$mark .= ''.PHP_EOL;
$mark .= '| 字段名 | 数据类型 | 默认值 | 允许非空 | 自动递增 | 备注 |'.PHP_EOL;
$mark .= '| ------ | ------ | ------ | ------ | ------ | ------ |'.PHP_EOL;
foreach ($v['COLUMN'] as $f) {
$mark .= '| '.$f['COLUMN_NAME'].' | '.$f['COLUMN_TYPE'].' | '.$f['COLUMN_DEFAULT'].' | '.$f['IS_NULLABLE'].' | '.($f['EXTRA'] == 'auto_increment' ? '是' : '').' | '.(empty($f['COLUMN_COMMENT']) ? '-' : str_replace('|', '/', $f['COLUMN_COMMENT'])).' |'.PHP_EOL;
}
$mark .= ''.PHP_EOL; } //markdown输出
$md_tplt = <<<EOT
# {$title}
> 本数据字典由PHP脚本自动导出,字典的备注来自数据库表及其字段的注释(`comment`).开发者在增改库表及其字段时,请在 `migration` 时写明注释,以备后来者查阅. {$mark}
EOT; //html输出
$marked_text = htmlentities($md_tplt);
$html_tplt = <<<EOT
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{$title} - Powered By Markdown Viewer</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" type="text/css" href="http://s1.ystatic.cn/41345695beaa9b2e/css/github-markdown.css">
<script src="http://s1.ystatic.cn/lib/marked/marked.js"></script>
<script src="http://s1.ystatic.cn/lib/highlight.js/highlight.pack.js?v=9.6.0"></script>
<link href="http://s1.ystatic.cn/lib/highlight.js/styles/github.css?v=9.6.0" rel="stylesheet">
</head>
<body>
<div class="markdown-body" id="content" style="margin:auto; width: 1024px;"> </div>
<div id="marked_text" style="display:none;">
{$marked_text}
</div>
<script>
var marked_text = document.getElementById('marked_text').innerText;
var renderer = new marked.Renderer();
renderer.table = function(header, body) {
return '<table class="table table-bordered table-striped">\\n'
+ '<thead>\\n'
+ header
+ '</thead>\\n'
+ '<tbody>\\n'
+ body
+ '</tbody>\\n'
+ '</table>\\n';
};
marked.setOptions({
renderer: renderer,
gfm: true,
tables: true,
breaks: false,
pedantic: false,
sanitize: true,
smartLists: true,
smartypants: false,
langPrefix: 'language-',
//这里使用了highlight对代码进行高亮显示
highlight: function (code) {
return hljs.highlightAuto(code).value;
}
});
document.getElementById('content').innerHTML = marked(marked_text);
</script>
</body>
</html>
EOT; file_put_contents($dbname.'.md', $md_tplt);
file_put_contents($dbname.'.html', $html_tplt);
} $dbs = ['huolicai'];
foreach ($dbs as $db) {
export_dict($db, $config);
}
?>

php生成markdown格式的数据库字典的更多相关文章

  1. [Selenium2+python2.7][Scrap]爬虫和selenium方式下拉滚动条获取简书作者目录并且生成Markdown格式目录

    预计阅读时间: 15分钟 环境: win7 + Selenium2.53.6+python2.7 +Firefox 45.2  (具体配置参考 http://www.cnblogs.com/yoyok ...

  2. 复制图片链接和标题生成Markdown文本

    写Markdown的时候常常会需要复制图片链接和标题以插入图片,不借助其他工具的话,一般需要先在Markdown文件中输入插入图片的格式,然后在浏览器中复制图片链接和标题将其依次粘贴到Markdown ...

  3. 如何快速生成数据库字典(thinkphp5.0)

    本教程将教你快速生成数据库字典 示例代码使用PHP框架:Thinkphp5.0 PHP代码: /** * 生成数据库字典html * 可直接另存为再copy到word文档中使用 * * @return ...

  4. MS SQL生成数据库字典脚本

    开发一个项目时都会有一个蛋疼的问题——写数据库需求文档,然后根据这个文档来建数据库,如果后来需求改了,要改数据库还要改文档,有时忙着忙着就忘改了,导致文档是过期的.那么我们自己写个脚本在数据库运行直接 ...

  5. SQL Server2005+、MySQL、Oracle 数据库字典生成工具

    之前找的数据库字典生成工具基本上都依赖于 Office Com 组件,在不安装 Office的情况下无法使用.怒,于是自己用C# 写了一个.     特征如下:         一.支持的数据库 MS ...

  6. 自动生成数据库字典(sql2008)

    每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 存储过程: SET ANSI_NULLS ON GO SET QUOT ...

  7. 自动生成数据库字典(sql2008) 转自 飘渺の云海

    每次做项目的时候都要做数据字典,这种重复的工作实在很是痛苦,于是广找资料,终于完成了自动生成数据库字典的工作,废话少说,上代码. 截取一部分图片: 存储过程: SET ANSI_NULLS ON GO ...

  8. SQL Server2008生成数据库字典

    1.我们在开发过程中可能会遇到这样的一种情况"当我们进行维护其他人的项目时或者项目的二次开发时可能会对原始的数据表进行分析",这里为大家介绍一种方便快捷生成数据库字典的方式. 我们 ...

  9. PHP 使用程序进行数据库字典文件生成 导出数据库字典

    作为一个程序员肯定是不愿意写文档的!!! 尤其最麻烦的数据库字典文档 所以偷懒写了一个PHP程序来进行数据库字典导出 记录一下  以免以后忘记 //使用的是Laravel框架 可以转换成原生导出$ta ...

随机推荐

  1. HDU 2058 The sum problem (数学+暴力)

    题意:给定一个N和M,N表示从1到N的连续序列,让你求在1到N这个序列中连续子序列的和为M的子序列区间. 析:很明显最直接的方法就是暴力,可是不幸的是,由于N,M太大了,肯定会TLE的.所以我们就想能 ...

  2. python文件操作,读取,修改,合并

    # -*- coding:utf-8 -*- ''' 从11c开始提取 ''' import re import numpy as np import os year = '17A' ss=" ...

  3. PHP数据库抽象层--PDO(PHP Data Object) [一]

    1.简介:(PDO数据库访问抽象层,统一各种 数据库的访问接口 ) PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口.实现 PDO 接口的每个数据库驱动可以公开具体数据库 ...

  4. 教程-Delphi调用百度地图API(XE8+WIN7)

    unit U_map; interface //---------------------------------------------------// //----------COPY BY 无言 ...

  5. Spring Boot 应用系列 5 -- Spring Boot 2 整合logback

    上一篇我们梳理了Spring Boot 2 整合log4j2的配置过程,其中讲到了Spring Boot 2原装适配logback,并且在非异步环境下logback和log4j2的性能差别不大,所以对 ...

  6. MYC编译器源码之代码生成

    前面讲过语法的解析之后,代码生成方面就简单很多了.虽然myc是一个简单的示例编译器,但是它还是在解析的过程中生成了一个小的语法树,这个语法树将会用在生成exe可执行文件和il源码的过程中. 编译器在解 ...

  7. c# list修改某一个属性的值

    public class info() { public string name{get;set;} public string age{get;set;} } list<info> li ...

  8. C#获取微信二维码显示到wpf

    微信的api开放的二维码是一个链接地址,而我们要将这个二维码显示到客户端.方式很多,今天我们讲其中一种. /// <summary> /// 获取图片路径 /// </summary ...

  9. wpf使用DynamicDataDisplay插件,修改x轴的样式,改成透明的。

    时光偷走的,永远都是我们眼皮底下看不见的珍贵. 问题:X轴会显示灰色拖动条. 解决:将X轴颜色改为透明. DDD插件是开源的,但是网上的参考资料却很少,所以,很多问题在网上搜索不到,因为没有找到该插件 ...

  10. 用 vs 2017创建 windows 服务

    转载自:http://www.cnblogs.com/xujie/p/5695673.html 1.新建windows服务项目,我这里选择的是Framework4.0,没有选择高版本是为了防止在服务在 ...