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