跳转到主内容
极星编程网:以代码为星,赴技术山海!

phpEnv下MySQL字段注释批量提取 phpEnv数据库文档自动化

直接查information_schema.COLUMNS是最稳定方式,关键字段COLUMN_COMMENT存注释内容;需显式指定TABLE_SCHEMA,空注释返回空字符串而非NULL,建议按TABLE_NAME和ORDINAL_POSITION排序,并用表名为键组织PHP数组结构。 如何用 PHP 一次性读取所有表的字段注释 直接查
information_schema.COLUMNS
是最稳定的方式,不用依赖客户端工具或手动点 Navicat。关键字段是
COLUMN_COMMENT
,它存的就是你用
COMMENT 'xxx'
写进去的内容。 注意三点:
TABLE_SCHEMA
必须显式指定数据库名,不能留空或用
database()
函数(某些权限下会报错)
COLUMN_COMMENT
是字符串类型,空注释返回空字符串
''
,不是
NULL
,判断时别写成
IS NULL
字段顺序默认按
ORDINAL_POSITION
,但如果你要导出为文档,建议加
ORDER BY TABLE_NAME, ORDINAL_POSITION
保证可读性 示例 SQL:
SELECT TABLE_NAME AS `表名`, COLUMN_NAME AS `字段名`, COLUMN_TYPE AS `类型`, IS_NULLABLE AS `允许为空`, COLUMN_DEFAULT AS `默认值`, COLUMN_COMMENT AS `注释` FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'your_db_name' ORDER BY TABLE_NAME, ORDINAL_POSITION;
PHP 中执行并格式化为数组结构 别用
mysqli_fetch_all(MYSQLI_ASSOC)
一股脑拉平——字段注释要按表归组,否则后续生成 Markdown 或 Excel 文档时还得再遍历合并。 立即学习 “ PHP免费学习笔记(深入) ”; 推荐结构:
$docs['user']['id'] = ['type' => 'BIGINT', 'comment' => '主键'];
实操要点: 用
mysqli::query()
执行上面那条 SQL,不要用
multi_query
,纯查无需多语句 循环结果时,用
$row['表名']
作为一级键,避免硬编码字段索引(列序变动就崩) 如果某字段没写注释,
$row['注释']
是空字符串,建议统一转成
'-' 
或
null
,避免导出时出现空白单元格干扰阅读 导出为 Markdown 表格时的常见坑 MySQL 字段类型如
varchar(255)
、
datetime
、
tinyint(1)
直接塞进 Markdown 表格没问题,但以下情况容易翻车:
COLUMN_COMMENT
里含换行符(
\n
)或竖线
|
:Markdown 表格会错位,必须用
str_replace(["\n", "|"], [" ", "|"], $comment)
预处理 字段名含反引号或中文:PHP 生成字符串时无需转义,但写进 Markdown 表头时建议用双引号包裹,比如
"`user_id`"
而不是
`user_id`
(后者在某些解析器里会被误判) 表太多导致单个 Markdown 文件超 1000 行:Git diff 和编辑器加载变慢,建议按前缀拆分,例如
user_*.md
、
order_*.md
配合 php Env 自动生成文档的最小可行脚本 phpEnv 默认不带命令行入口,所以得自己写个
gen_docs.php
放在项目根目录,通过
php gen_docs.php
触发。 核心逻辑就三步: 从
$_ENV['DB_DATABASE']
或配置文件读库名(别硬编码) 用
mysqli_connect()
连接,失败时
die("DB connect failed: " . mysqli_connect_error())
查完数据后,用
file_put_contents('docs/fields.md', $markdown)
覆盖写入,别用
FILE_APPEND
,否则每次跑都叠加上去 最后一句提醒:字段注释不会自动同步到代码里的 PHPDoc,如果你们团队要求 PHP 类属性也带说明,得额外写个解析器匹配字段名和
@property
标签——这事没法靠 MySQL 元数据全自动完成。

相关文章