Laravel 5.2在Mac上因CLI模式未加载PDO扩展而失败,需通过php --ini确认php.ini路径并确保extension=pdo未被注释;php -m无pdo输出即未加载,可用php -r "new PDO('sqlite::memory:');"验证,报Class 'PDO' not found即证实缺失。

Mac 安装 Laravel 5.2 缺少 PDO 扩展,不是“装了没用”,而是 CLI 模式根本没加载——必须确认 php.ini 是否启用 extension=pdo 且路径与 php --ini 输出一致。
为什么 php -m 看不到 pdo,但网页里却正常?
Laravel 5.2 的 artisan 命令走的是 PHP CLI 模式,而浏览器访问走的是 Apache/Nginx 的 PHP SAPI。两者可能使用不同 php.ini 文件、甚至不同 PHP 版本。
- 执行
php --ini,看Loaded Configuration File路径(比如/opt/homebrew/etc/php/8.2/php.ini) - 打开该文件,确认有这一行且**未被注释**:
extension=pdo - 如果用 Homebrew 安装 PHP 8.2+,
pdo通常已内置,但若用系统 PHP 或旧版 brew,可能需手动安装:brew install php@8.2(自动带全扩展)
Mac 上 pdo 扩展名和加载方式的细节差异
macOS 不像 Linux 那样区分 php-pdo 包,而是通过 .so 文件控制;Homebrew PHP 默认启用 pdo,但部分用户手动改过 php.ini 后删掉了它。
- 检查是否真缺失:
php -m | grep pdo—— 如果无输出,说明 CLI 没加载 - 常见错误写法:
extension=php_pdo.so(错!Mac 上是extension=pdo) - 如果 php.ini 里写了
extension=pdo_mysql却没写extension=pdo,也会报错:Laravel 5.2 初始化数据库连接前就要求pdo基础扩展存在
验证 pdo 是否真正可用的最小测试
别等跑完 composer create-project 再失败,先用一行命令测通路:
php -r "new PDO('sqlite::memory:'); echo 'OK';"
如果报 Class 'PDO' not found 或 Call to undefined function PDO(),说明 pdo 扩展确实没加载成功;如果报 could not find driver,说明 pdo 已加载,只是缺具体驱动(如 pdo_sqlite 或 pdo_mysql),这时再补装对应扩展。
最常被忽略的一点:Laravel 5.2 不会告诉你「pdo 扩展缺失」,它会在 php artisan key:generate 或首次 php artisan serve 时直接抛出未捕获异常,堆栈里藏在 PDO::__construct 调用位置——所以排查要从 CLI 的 php -m 和 php --ini 开始,而不是看日志里哪一行报错。


















