本教程將教你快速生成數據庫字典php
示例代碼使用PHP框架:Thinkphp5.0css
PHP代碼:html
1 /** 2 * 生成數據庫字典html 3 * 可直接另存爲再copy到word文檔中使用 4 * 5 * @return mixed 6 */ 7 public function dataDictionary() 8 { 9 $tables = Db::query('SHOW TABLE STATUS'); 10 $table_list = array_map('array_change_key_case', $tables); 11 $table_data = []; 12 foreach ($table_list as $item) { 13 $table_name = str_replace(config('database.prefix'),'',$item['name']); 14 $table_fields = $this->showColumns($table_name); 15 foreach ($table_fields as &$fieldItem) { 16 $fieldItem['comment'] = $this->getDbColumnComment($table_name, $fieldItem['name']); 17 } 18 $table_data[] = [ 19 'table_name' => $item['name'], 20 'table_comment' => $item['comment'], 21 'table_fields' => $table_fields 22 ]; 23 } 24 $this->assign('table_data', $table_data); 25 26 return $this->fetch(''); 27 } 28 29 /** 30 * 顯示錶結構信息 31 * 32 * @param string $table 33 * @return array 34 */ 35 private function showColumns($table){ 36 37 $sql = 'SHOW COLUMNS FROM `'.config('database.prefix').$table.'`'; 38 $result = Db::query($sql); 39 if ($result === false) return array(); 40 $array = array(); 41 if (!empty($result)) { 42 foreach ($result as $k=>$v) { 43 $array[$v['Field']] = [ 44 'name' => $v['Field'], 45 'type' => $v['Type'], 46 'null' => $v['Null'], 47 'default' => $v['Default'], 48 'primary' => (strtolower($v['Key']) == 'pri'), 49 'autoinc' => (strtolower($v['Extra']) == 'auto_increment'), 50 ]; 51 } 52 } 53 54 return $array; 55 } 56 57 /** 58 * 獲取數據庫字段註釋 59 * 60 * @param string $table_name 數據表名稱(必須,不含前綴) 61 * @param string|boolean $field 字段名稱(默認獲取所有字段,單個字段請輸入字段名稱) 62 * @param string $table_schema 數據庫名稱(可選) 63 * @return string 64 */ 65 private function getDbColumnComment($table_name = '', $field = true, $table_schema = ''){ 66 // 接收參數 67 $database = config('database'); 68 69 $table_schema = empty($table_schema) ? $database['database'] : $table_schema; 70 $table_name = $database['prefix'] . $table_name; 71 72 // 處理參數 73 $param = [ 74 $table_name, 75 $table_schema 76 ]; 77 78 // 字段 79 $columnName = ''; 80 if($field !== true){ 81 $param[] = $field; 82 $columnName = "AND COLUMN_NAME = ?"; 83 } 84 85 // 查詢結果 86 $result = Db::query("SELECT COLUMN_NAME as field,column_comment as comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = ? AND table_schema = ? $columnName", $param); 87 if(empty($result) && $field !== true){ 88 return $table_name . '表' . $field . '字段不存在'; 89 } 90 91 // 處理結果 92 foreach($result as $k => $v){ 93 $data[$v['field']] = $v['comment']; 94 if(strpos($v['comment'], '#*#') !== false){ 95 $tmpArr = explode('#*#', $v['comment']); 96 $data[$v['field']] = json_decode(end($tmpArr), true); 97 } 98 } 99 // 字段註釋格式不正確 100 if(empty($data)){ 101 return $table_name . '表' . $field . '字段註釋格式不正確'; 102 } 103 return count($data) == 1 ? reset($data) : $data; 104 }
Html代碼:sql
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4 <title>快速生成數據庫字典</title> 5 <style type="text/css"> 6 .table-name { 7 text-align: center; 8 margin: 15px auto; 9 font-weight: bold; 10 font-size: 20px; 11 } 12 13 table { 14 border-collapse: collapse; 15 margin: 0 auto; 16 text-align: center; 17 width: 550px; 18 } 19 20 table caption { 21 margin: 15px auto; 22 } 23 24 table td, table th { 25 border: 1px solid #cad9ea; 26 color: #666; 27 height: 30px; 28 } 29 30 table thead th { 31 background-color: #CCE8EB; 32 width: 100px; 33 } 34 35 table tr:nth-child(odd) { 36 background: #fff; 37 } 38 39 table tr:nth-child(even) { 40 background: #F5FAFA; 41 } 42 </style> 43 </head> 44 <body> 45 46 {foreach $table_data as $tableInfo} 47 <div class="table-name">{$tableInfo.table_name}(表註釋:{$tableInfo.table_comment})</div> 48 <table class="table"> 49 <thead> 50 <tr> 51 <th>字段</th> 52 <th>類型</th> 53 <th>空</th> 54 <th>默認</th> 55 <th>註釋</th> 56 </tr> 57 </thead> 58 <tbody> 59 {foreach $tableInfo['table_fields'] as $field} 60 <tr> 61 <td> 62 {$field.name} 63 </td> 64 <td> 65 {$field.type} 66 </td> 67 <td> 68 {$field.null} 69 </td> 70 <td style="max-width: 30px;"> 71 {$field.default} 72 </td> 73 <td> 74 {$field.comment} 75 </td> 76 </tr> 77 {/foreach} 78 </tbody> 79 </table> 80 {/foreach} 81 82 83 </body> 84 </html>
注:如需保存到word文檔,需網頁另存爲html文件並用word軟件打開,將內容全選複製到新的word文檔中便可。數據庫
若有不明白的,歡迎下方留言。json