$cfg['Servers'][$i]['verbose']必须唯一字符串且显式赋值,否则下拉菜单无法区分服务器;$cfg['ServerDefault']必须为整数0才能显示完整下拉列表;配置需满足host/auth_type存在、索引连续、无BOM及语法错误。

每个 $cfg['Servers'][$i]['verbose'] 必须唯一且显式赋值
登录页下拉菜单里显示的服务器名称,完全取决于 $cfg['Servers'][$i]['verbose'] 的值。它不继承 host 或 port,也不会自动生成;留空、重复、或用同一字符串(比如都写成 'MySQL Server'),会导致下拉项无法区分,甚至被 phpMyAdmin 忽略该条目。
常见错误是只改 host 和 port,却忘了设 verbose,结果所有服务器在下拉里都叫“Server 1”或者干脆不显示。
-
$cfg['Servers'][$i]['verbose']必须是字符串,不能为null或空数组 - 若用循环生成配置,必须在循环体内为每个
$i单独赋值,不能在循环外统一写死 - 建议包含可识别信息:地域、环境、端口、实例名,例如
'Prod (rds-beijing:3306)'或'Docker MariaDB (3307)'
为什么 $cfg['ServerDefault'] = 0 是备注生效的前提
当 $cfg['ServerDefault'] 设为非零值(比如 1),phpMyAdmin 会跳过下拉菜单,直接尝试连接该索引服务器——此时即使你配了 5 个带不同 verbose 的服务器,登录页也只显示一个输入框,根本看不到备注。
设为 0 才强制渲染完整下拉列表,让所有 verbose 值真正暴露给用户。
立即学习“PHP免费学习笔记(深入)”;
- 务必放在所有服务器配置之后、
?>之前 - 不要写成
'0'(字符串)或false,必须是整数0 - 如果用了
$cfg['AllowArbitraryServer'] = true,仍需$cfg['ServerDefault'] = 0,否则任意服务器输入框不会和下拉共存
循环中动态拼接 verbose 要避开 PHP 字符串陷阱
直接拼接 $cfg['Servers'][$i]['verbose'] = 'Server ' . $i . ' (' . $host . ')'; 看似合理,但若 $host 是数组或 null,会触发 PHP 警告并导致整个配置解析失败——phpMyAdmin 启动白屏,且无明确报错。
安全做法是先确保变量类型干净,再拼接。
- 用
$host = $h['host'] ?? 'localhost';提前兜底,避免??左侧为数组时出错 - 端口若来自
$h['port'],需转为整数:(int)$h['port'] ?: 3306,防止字符串'3307'被当成 0 - 别在
verbose里放敏感信息(如密码片段、内网 IP),它会明文出现在 HTML 下拉选项的value和text中
备注不显示?优先检查这三处硬性条件
备注失效往往不是拼写问题,而是底层配置没达标。只要以下任一条件不满足,verbose 就不会出现在下拉里:
-
$cfg['Servers'][$i]缺'host'或'auth_type'—— 这两个是必填字段,漏掉一个,整个索引条目被跳过 - 索引不连续:比如只有
[1]和[3],[2]缺失 → phpMyAdmin 遇到第一个空索引就终止遍历,[3]及之后的verbose全部丢弃 - 配置文件含 BOM 或语法错误(如漏分号、单引号未闭合)→ PHP 解析中断,后续所有
$cfg赋值无效,包括verbose
最稳妥的方式永远是:用干净的 $hosts 数组 + foreach 循环统一生成全部字段,不手写索引、不插注释、不混用配置块。备注只是其中一环,它依赖整个结构的完整性。



















