答案是PHP CLI环境未启用pdo_mysql扩展,需通过php --ini定位配置文件、按系统安装并启用该扩展(如Ubuntu用sudo apt install php-mysql),再用php -m验证加载成功。

不是 Composer 没装对,是 PHP 根本没加载 pdo_mysql 扩展——装包解决不了底层连接能力。
为什么 composer require 会报 “ext-pdo_mysql missing”
Composer 在 install 或 update 时读取依赖的 composer.json(比如 Laravel、Doctrine、Medoo),发现里面有 "ext-pdo_mysql": "*" 这类声明,就会立刻检查当前 PHP CLI 环境是否已启用该扩展。它不关心你 Web 页面能不能连 MySQL,只认 php -m 输出里有没有 pdo_mysql。
常见错误现象:
The requested PHP extension ext-pdo_mysql * is missing from your system-
Class 'PDO' not found(说明连 PDO 基础都没起来) - Web 页面正常,但
composer install报错(CLI 和 Web 使用了不同 php.ini)
确认 CLI 环境到底用了哪个 php.ini
别猜路径,直接问 PHP:
php --ini → 看 “Loaded Configuration File” 那行路径
php -m | grep pdo → 如果只输出 pdo,没 pdo_mysql,说明扩展没启;如果啥都不出,说明 PDO 本身都关了。
关键点:你运行 composer 用的是 CLI 版 PHP,不是 Apache 或 Nginx 调用的 PHP。两者配置文件可能完全不同。
按系统启用 pdo_mysql 扩展
Linux(Debian/Ubuntu):sudo apt install php-mysql(自动启用,不用改 php.ini)
Linux(CentOS/RHEL):sudo yum install php-pdo php-mysqlnd 或 sudo dnf install php-pdo php-mysqlnd
macOS(Homebrew):
先确认 PHP 版本:brew list | grep php,再重装对应版本(如 brew reinstall php@8.2),Homebrew 通常自带 pdo_mysql
Windows(XAMPP/WAMP):
打开 php.ini(就是 php --ini 显示的那个路径),找到这行:;extension=pdo_mysql → 改成 extension=pdo_mysql
注意:有些旧版写的是 extension=php_pdo_mysql.dll,以你 extension_dir 下实际文件名为准
改完必须重启服务:
Apache 用户执行 sudo systemctl restart apache2(或 httpd)
PHP-FPM 用户执行 sudo systemctl restart php8.2-fpm(版本号按实际)
验证是否真正生效
执行三步验证:
-
php -m | grep pdo_mysql→ 必须有输出 -
php -r "new PDO('mysql:host=127.0.0.1;', '', '');" || echo "fail"→ 不报错才算真能用 -
composer check-platform-reqs→ 看ext-pdo_mysql是否显示 ✅
最容易被忽略的是:多 PHP 版本共存时,php 命令指向的版本和 composer 实际调用的 PHP 可能不一致。如果装了 php@8.1 和 php@8.2,但 php -v 是 8.1,而 composer 脚本里硬编码调用了 8.2 的二进制,那你在 8.1 的 php.ini 里启了也没用。



















