pdo扩展在phpenv中默认不启用,需取消php.ini中extension=pdo(windows)或extension=pdo.so(linux/macos)及extension=pdo_mysql(或对应dll/so文件)两行注释,并确认cli与web共用同一php.ini,重启服务后验证。

PDO 扩展在 phpEnv 中默认不启用,但不用重装 PHP 或手动编译——只需确认两个 extension 行已取消注释,并确保 CLI 与 Web 使用的是同一份 php.ini。
怎么找到 phpEnv 正在用的 php.ini
phpEnv 管理多个 PHP 版本,每个版本有独立配置。直接运行 php --ini(CLI)或建个 info.php 写 <?php phpinfo(); ?>(Web),都能看到 “Loaded Configuration File” 路径。常见位置如:C:\phpenv\versions\8.2.12\php.ini(Windows)或 /usr/local/phpenv/versions/8.2.12/etc/php.ini(macOS/Linux)。别改错文件。
必须启用的两行 extension
打开对应 php.ini,搜索以下两行并去掉前面的分号 ;:
-
extension=pdo(PHP 8.0+ NTS Windows)或extension=pdo.so(Linux/macOS) -
extension=pdo_mysql(Windows 下可能是extension=pdo_mysql.dll,注意文件名是否带版本号,比如pdo_mysql_82.dll;去ext/目录下确认真实存在)
顺序无关紧要,但缺一不可:只开 pdo 会报 Class 'PDO' not found,只开 pdo_mysql 会报 could not find driver。
重启服务后仍不生效?检查 CLI 和 Web 是否一致
phpEnv 的 CLI(命令行)和 Web(Apache/Nginx)可能加载不同配置:
- 运行
php -m | grep pdo,应同时输出pdo和pdo_mysql - 浏览器访问
info.php,搜 “PDO drivers”,必须看到mysql在列表里 - 如果 CLI 有、Web 没有:说明 Web 服务器没用对 php.ini,检查 phpEnv 切换版本是否生效(
phpenv global 8.2.12),或 Apache 的LoadModule php_module是否指向正确 PHP 版本 - 如果都显示已加载,但
new PDO()仍失败:检查 DSN 是否含charset=utf8mb4,且PDO::ATTR_EMULATE_PREPARES => false已设——这不是扩展问题,而是连接时的硬性要求
最常被忽略的是:phpEnv 切换 PHP 版本后,必须重启 Web 服务(如 httpd -k restart 或 nginx -s reload),且 CLI 和 Web 的 php.ini 必须是同一份,否则验证永远对不上。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











