最推荐方式是执行select version()语句,它轻量、通用、权限要求低,返回mysql服务端真实版本号(如8.0.33);误用mysqli_get_client_info()或pdo::getattribute(pdo::attr_client_version)会得到客户端版本,而非服务端版本。

PHP 连接 MySQL 后怎么查数据库版本
直接执行 SELECT VERSION() 是最轻量、最通用的方式,无论用 mysqli 还是 PDO 都能立刻拿到结果,不需要额外扩展或配置。
常见错误是误用 mysqli_get_client_info() 或 PDO::getAttribute(PDO::ATTR_CLIENT_VERSION),它们返回的是客户端(PHP 驱动)版本,不是 MySQL 服务端版本。
-
mysqli方式:$mysqli = new mysqli('localhost', 'user', 'pass', 'db'); $result = $mysqli->query('SELECT VERSION()'); $version = $result->fetch_row()[0]; // 如 '8.0.33' -
PDO方式:$pdo = new PDO('mysql:host=localhost;dbname=db', 'user', 'pass'); $version = $pdo->query('SELECT VERSION()')->fetchColumn();
用 phpinfo() 看 PHP 自身和扩展支持的数据库信息
phpinfo() 不显示 MySQL 服务端版本,但它能快速确认当前 PHP 加载了哪些数据库扩展(如 mysqli、pdo_mysql)、客户端库路径和编译参数,对排查“为什么连不上”或“不支持某个特性”很有用。
注意:线上环境必须禁用 phpinfo() 页面,避免敏感信息泄露;开发时可临时加一个带密码校验的封装页。
- 关键字段包括:
Client API version(对应mysqlnd或libmysqlclient版本)、Client API library version、mysqli.default_host等默认配置 - 如果页面里找不到
mysqli或PDO模块,说明扩展没启用,需检查php.ini中是否取消了extension=mysqli和extension=pdo_mysql的注释
命令行下用 mysql --version 和 mysqladmin 查服务端版本
当 PHP 脚本无法运行或权限受限时,直接登录服务器终端是最可靠的兜底方式。但要注意区分两个命令的用途:
-
mysql --version显示的是本地安装的 MySQL 客户端工具版本,不一定等于服务端版本 -
mysqladmin -u root -p version才真正连接到 MySQL 服务端并返回Server version、Protocol version等实际运行信息 - 若提示
Access denied,说明账号无PROCESS权限(mysqladmin version需要),可改用mysql -u root -p -e "SELECT VERSION();"
PDO::getAttribute(PDO::ATTR_SERVER_VERSION) 的兼容性坑
这个方法看起来最“原生”,但实际支持有限:仅在使用 mysqlnd 驱动时返回真实服务端版本;若底层是 libmysqlclient(旧系统常见),它会返回空字符串或客户端版本,完全不可靠。
因此除非你明确知道 PHP 编译时用了 mysqlnd(可通过 phpinfo() 中 mysqlnd 段确认),否则别依赖这个接口。
- 判断是否为
mysqlnd:var_dump(PHP_VERSION_ID >= 70400 ? \PDO::MYSQL_ATTR_DIRECT_QUERY : null);不如直接看phpinfo()里的mysqlnd小节更直观 - 安全做法永远是走 SQL 查询:
SELECT VERSION()或SELECT @@version,两者等效,后者在某些严格模式下更稳定
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











