使用PHP生成MySQL数据字典

一个项目完成之后,按照需求,我需要给这个项目写设计文档,数据库字典。

设计文档到时好说,但是数据库字典可真的是有点吓到我了。

项目开始的比较急,最开始建数据库的时候没有用excel写数据库字典。

这几十张表的数据库,一个一个的写,那真的是酸爽。

但是,这一切好像又都不是事。

我们有强大的PHP啊。

下面给大家分享一个自己写的函数:使用PHP生成mysql字典。

php 复制代码
<?php
    $dbhost = '127.0.0.1:3306';                         // mysql服务器主机地址
    $dbuser = 'root';                                 // mysql用户名
    $dbpass = 'root';                         // mysql用户名密码
    $dbname = "shopxo";
    //$mysql = mysqli_connect($dbhost, $dbuser, $dbpass);//这是mysql的链接方法
    $mysql = new mysqli("localhost", $dbuser,$dbpass,$dbname, "3306"); //这是mysqli的链接方法
    if(! $mysql )
    {
        die('连接失败: ' . mysqli_error($mysql));
    }
 
    $html = expertDirectory($mysql,$dbname);
    echo "<pre>";
    var_dump($html);



   
    /**
     * 导出数据库字典
     */
    function expertDirectory($mysql,$dbname)
    {
        mysqli_query($mysql, "set names utf8");
        $table_result = $mysql->query('show tables');
       
        $no_show_table = array();    //不需要显示的表
        $no_show_field = array();   //不需要显示的字段
       
        //取得所有的表名
        while($row = mysqli_fetch_array($table_result)){
            if(!in_array($row[0],$no_show_table)){
            $tables[]['TABLE_NAME'] = $row[0];
          }
        }
        //替换所以表的表前缀
        // if($_GET['prefix']){
        //  $prefix = 'sent_';
        //  foreach($tables as $key => $val){
        //    $tableName = $val['TABLE_NAME'];
        //    $string = explode('_',$tableName);
        //    if($string[0] != $prefix){ 
        //      $string[0] = $prefix; 
        //      $newTableName = implode('_', $string); 
        //      $mysql->query('rename table '.$tableName.' TO '.$newTableName); 
        //    }
        //  }
        //  echo "替换成功!";exit();
        // }
       
        //循环取得所有表的备注及表中列消息
        foreach ($tables as $k=>$v) {
            $sql  = 'SELECT * FROM ';
            $sql .= 'INFORMATION_SCHEMA.TABLES ';
            $sql .= 'WHERE ';
            $sql .= "table_name = '{$v['TABLE_NAME']}'  AND table_schema = '{$dbname}'";
            $table_result = $mysql->query($sql);
            while ($t = mysqli_fetch_array($table_result) ) {
                $tables[$k]['TABLE_COMMENT'] = $t['TABLE_COMMENT'];
            }
       
            $sql  = 'SELECT * FROM ';
            $sql .= 'INFORMATION_SCHEMA.COLUMNS ';
            $sql .= 'WHERE ';
            $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$dbname}'";
       
            $fields = array();
            $field_result = $mysql->query($sql);
            while ($t = mysqli_fetch_array($field_result) ) {
                $fields[] = $t;
            }
            $tables[$k]['COLUMN'] = $fields;
        }
        // $mysql->close($mysql_conn);
        $html = '';
        //循环所有表
        foreach ($tables as $k=>$v) {
            $html .= '  ' . ($k + 1) . '、' . $v['TABLE_COMMENT'] .'  ('. $v['TABLE_NAME']. ')'."
";
            $html .= '  '."
";
            $html .= '    '."
";
          $html .= '      '."
";
          $html .= '        字段名'."
";
          $html .= '        数据类型'."
";
          $html .= '        默认值'."
";
          $html .= '        允许非空'."
";
          $html .= '        自动递增'."
";
          $html .= '        备注'."
";
          $html .= '      '."
";
       
            foreach ($v['COLUMN'] as $f) {
            if(!@is_array($no_show_field[$v['TABLE_NAME']])){
              $no_show_field[$v['TABLE_NAME']] = array();
            }
            if(!in_array($f['COLUMN_NAME'],$no_show_field[$v['TABLE_NAME']])){
              $html .= '      '."
";
              $html .= '        ' . $f['COLUMN_NAME'] . ''."
";
              $html .= '        ' . $f['COLUMN_TYPE'] . ''."
";
              $html .= '        ' . $f['COLUMN_DEFAULT'] . ''."
";
              $html .= '        ' . $f['IS_NULLABLE'] . ''."
";
              $html .= '        ' . ($f['EXTRA']=='auto_increment'?'是':' ') . ''."
";
              $html .= '        ' . $f['COLUMN_COMMENT'] . ''."
";
              $html .= '      '."
";
            }
            }
            $html .= '    '."
";
          $html .= '  '."
";
        }
        return $html;
    }

其实这只是一个简单的小函数,平时用到的几率也不大。

但是,在需要的时候,他会给你省很多力气。

有好的建议,请在下方输入你的评论。

相关推荐
极客on之路4 小时前
mysql explain type 各个字段解释
数据库·mysql
代码雕刻家4 小时前
MySQL与SQL Server的基本指令
数据库·mysql·sqlserver
lThE ANDE4 小时前
开启mysql的binlog日志
数据库·mysql
网络安全许木5 小时前
自学渗透测试第21天(基础命令复盘与DVWA熟悉)
开发语言·网络安全·渗透测试·php
川石课堂软件测试5 小时前
软件测试:典型面试题库
数据库·python·功能测试·mysql·单元测试·grafana·prometheus
爱学习的小囧6 小时前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
Lucifer三思而后行6 小时前
zCloud 纳管 MySQL 8.4 数据库
数据库·mysql·oracle
eRTE XFUN6 小时前
docker 安装 mysql
mysql·adb·docker
WangJunXiang66 小时前
GFS分布式文件系统
开发语言·php
eEKI DAND8 小时前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器