composer 不安装数据库驱动,而是依赖 php 的 pdo 扩展(如 pdo_mysql);需系统级启用扩展,再通过 composer 安装 orm 包(如 doctrine/orm 或 laravel/framework),注意包名准确、自动加载生效及生产环境保留迁移工具。

Composer 安装数据库驱动:不是装“驱动”,是装 PDO 扩展对应 PHP 模块
Composer 本身不安装数据库驱动,它只管理 PHP 包。真正连接 MySQL/PostgreSQL 的底层能力来自 PHP 的 PDO 扩展和对应数据库模块(如 pdo_mysql、pdo_pgsql),这些必须由系统或 PHP 环境提供。
你运行 composer require mysql 或类似命令会失败——因为没这包。常见错误现象:Class 'PDO' not found 或 Driver not found,本质是 PHP 缺扩展,不是 Composer 没拉对包。
- Linux(Debian/Ubuntu):运行
sudo apt install php-mysql(MySQL)或sudo apt install php-pgsql(PostgreSQL) - macOS(Homebrew + PHP):用
brew install php@8.2-mysql类似命令,具体看你的 PHP 版本 - Windows(XAMPP/WAMP):打开
php.ini,取消注释extension=pdo_mysql或extension=php_pdo_pgsql.dll - 确认是否生效:执行
php -m | grep pdo,应看到pdo和对应驱动(如pdo_mysql)
引入 ORM 扩展包:选 doctrine/orm 还是 laravel/framework?看项目类型
ORM 不是“数据库驱动”,而是帮你写 SQL 的高级封装。Composer 装的是这类 PHP 包,但选哪个取决于你用什么框架或是否裸用。
常见错误:在 Laravel 项目里又手动装 doctrine/orm,结果模型行为冲突、事件不触发、迁移命令失效。
- Laravel 项目:直接用内置的 Eloquent,无需额外装 ORM 包;
composer require laravel/framework是框架本身,不是 ORM 插件 - 纯 PHP / Symfony / Slim 项目:可选
composer require doctrine/orm,但注意它依赖doctrine/dbal和doctrine/persistence,Composer 会自动拉取 - 轻量需求(比如只查写几条记录):考虑
composer require medoo/medoo,比 Doctrine 启动快、依赖少,但功能也更简单
composer.json 里写错数据库相关依赖名,会导致 autoload 失败
很多人复制粘贴时把包名写错,比如 "doctrine/orm" 写成 "doctrine/orms" 或 "doctrine/ORM"(大小写敏感),Composer 能下载但类加载器找不到命名空间。
典型表现:Class 'Doctrine\ORM\EntityManager' not found,即使 vendor/autoload.php 已引入。
- 务必从 packagist.org 复制准确包名,例如 Doctrine ORM 正确地址是
https://packagist.org/packages/doctrine/orm - 检查
vendor/composer/autoload_psr4.php是否生成了对应映射;如果没生成,说明包没正确安装或命名空间注册失败 - 运行
composer dump-autoload -o强制刷新自动加载,尤其在手动改过composer.json后
生产环境部署时,composer install --no-dev 可能砍掉 DB 迁移工具
很多 ORM 附带 CLI 工具(如 Doctrine 的 doctrine:migrations:diff、Laravel 的 php artisan migrate),它们通常被列为 require-dev,上线时一加 --no-dev 就没了。
结果就是:代码连得上库,但跑不了迁移,表结构缺失,报错 SQLSTATE[42S02]: Base table or view not found。
- 迁移类工具(
doctrine/migrations、laravel/framework的 artisan)必须放在require,不能放require-dev - 若坚持分环境,可用 Composer 的
config.platform指定目标环境 PHP 版本,避免本地高版本包被误删 - 上线前用
composer show快速核对关键包是否存在,比如composer show doctrine/orm
最常被忽略的一点:PHP 扩展是否随容器/部署脚本一起启用。Dockerfile 里装了 php-mysql,但没重启 PHP-FPM,照样连不上。别只盯着 Composer。











