发布于2026-07-06 阅读(0)
扫一扫,手机访问
先说个关键信息:PDO 扩展在 phpEnv 中默认确实是关着的。不过别紧张,不用重装 PHP,也不用折腾手动编译——只需要确认两个 extension 行已经取消了注释,并且确保 CLI 和 Web 用的是同一份 php.ini 就行。这事儿其实就三步,我们一步步拆开说。
phpEnv 管理着多个 PHP 版本,每个版本都有自己独立的配置,所以第一步就是找到对的那一个。直接在命令行运行 php --ini,或者在 Web 根目录下建一个 info.php,写上 ,然后浏览器访问一下。两个方法都能看到 “Loaded Configuration File” 这一行,这就是 php.ini 的路径。常见的位置像 C:\phpenv\versions\8.2.12\php.ini(Windows),或者 /usr/local/phpenv/versions/8.2.12/etc/php.ini(macOS/Linux)。关键是——别改错文件,不然折腾半天都是白费力气。
找到正确的 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。两个都打开,才算齐活。

最常见的问题来了——你以为改了配置,但实际上 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。否则你验证再多遍,对不上就是白搭。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8