Windows10+MAMP PRO5环境下Laravel9执行php artisan migrate报could not find driver错误
Laravel迁移报错:could not find driver 解决方案
错误信息
Illuminate\Database\QueryException could not find driver (SQL: select * from information_schema.tables where table_schema = laravel_app_db and table_name = migrations and table_type = 'BASE TABLE') at C:\MAMP\htdocs\laravel_app\vendor\laravel\framework\src\Illuminate\Database\Connection.php:759 755▕ // If an exception occurs when attempting to run a query, we'll format the error 756▕ // message to include the bindings with SQL, which will make this exception a 757▕ // lot more helpful to the developer instead of just the database's errors. 758▕ catch (Exception $e) { ➜ 759▕ throw new QueryException( 760▕ $query, $this->prepareBindings($bindings), $e 761▕ ); 762▕ } 763▕ } 1 C:\MAMP\htdocs\laravel_app\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70 PDOException::("could not find driver") 2 C:\MAMP\htdocs\laravel_app\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70 PDO::__construct("mysql:host=127.0.0.1;port=8889;dbname=laravel_app_db", "root", "root", [])
环境信息
- Windows 10 Pro
- PHP 8.1.0(MAMP PRO 5自带)
- MAMP PRO 5,已通过phpMyAdmin创建
laravel_app_db数据库,MySQL端口配置为8889 - Laravel项目已正常安装并可访问页面,仅数据库迁移步骤报错
已尝试的解决方法
- 启用MAMP PHP目录下
php.ini中的php_openssl.dll、php_mysqli.dll、php_pdo_mysql.dll扩展 - 修改
.env文件中的数据库连接配置(主机、端口、库名、账号密码) - 在
AppServiceProvider.php中添加Schema::defaultStringLength(191)配置 - 修改
database.php中的MySQL连接参数
有效解决方案
1. 确保命令行使用MAMP自带的PHP版本
Windows默认会优先使用系统自带的PHP(如果已安装),而非MAMP的PHP,导致CLI环境未加载MAMP中配置的扩展:
- 打开命令行,执行
php -v,查看当前使用的PHP版本是否为MAMP的8.1.0 - 如果版本不符,将MAMP的PHP路径(
C:\MAMP\bin\php\php8.1.0)添加到系统环境变量PATH的最前端 - 重启命令行,再次执行
php -v确认版本正确
2. 验证PHP扩展是否加载成功
在命令行执行php -m,查看输出列表中是否包含pdo_mysql:
- 如果未找到,检查MAMP的
php.ini文件:- 确认
extension_dir设置正确,应为extension_dir = "ext"(指向PHP目录下的ext文件夹) - 确认
extension=php_pdo_mysql.dll前没有注释符号; - 检查
ext文件夹中是否存在php_pdo_mysql.dll文件
- 确认
3. 重启服务并重新执行迁移
- 重启MAMP的MySQL和Apache服务
- 在项目根目录执行
php artisan migrate
附用户配置文件(供参考)
AppServiceProvider.php
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; //<---- added this line class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { Schema::defaultStringLength(191); //<---- added this line } }
database.php(MySQL配置段)
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '8889'), 'database' => env('DB_DATABASE', 'laravel_app_db'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', 'root'), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ],
php.ini(已启用相关扩展)
extension=php_bz2.dll extension=php_gd.dll ;extension=php_gd2.dll extension=php_gettext.dll extension=php_mbstring.dll extension=php_exif.dll extension=php_mysqli.dll extension=php_pdo_sqlite.dll extension=php_sqlite3.dll extension=php_curl.dll extension=php_openssl.dll extension=php_imagick.dll extension=php_pdo_mysql.dll ;extension=php_apc.dll ;extension=php_apcu.dll ;extension=php_eaccelerator.dll ;extension=php_xcache.dll ;zend_extension=php_opcache.dll
.env(数据库配置段)
APP_NAME=laravel_app APP_ENV=local APP_KEY=base64:TIlPzLirZ+9Jw6Am0m4XDEodGxmbc8wXSAKQ0XDb5fU= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=8889 DB_DATABASE=laravel_app_db DB_USERNAME=root DB_PASSWORD=root
内容的提问来源于stack exchange,提问作者jus_iljas
相关产品推荐
相关产品推荐

