PHP MVC项目集成Illuminate Database报错:Unsupported driver [] 求助
问题排查:Illuminate Database 连接报错 Unsupported driver []
错误信息
Fatal error: Uncaught InvalidArgumentException: Unsupported driver [] in C:\laragon\www\mvctest1\vendor\illuminate\database\Connectors\ConnectionFactory.php:286
相关配置代码
数据库类(App\Classes\Database)
<?php namespace App\Classes; use Illuminate\Database\Capsule\Manager as Capsule; class Database { public function __construct() { $db = new Capsule; $db->addConnection([ 'driver' => getenv('DB_DRIVER'), 'host' => getenv('HOST'), 'database' => getenv('DB_NAME'), 'username' => getenv('DB_USERNAME'), 'password' => getenv('DB_PASSWORD'), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '' ]); // Make this Capsule instance available globally via static methods... (optional) $db->setAsGlobal(); // Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher()) $db->bootEloquent(); } }
Bootstrap初始化文件
<?php /** * * Start session if not already started */ if(!isset($_SESSION)) session_start(); // load environment variables require_once __DIR__ . '/../app/config/_env.php'; //instantiate database class new \App\Classes\Database(); require_once __DIR__ . '/../app/routing/routes.php'; new \App\Routing\RouteDispatcher($router);
.env配置文件
APP_URL=http://mvctest1.test/ APP_ENV=local APP_NAME="mvc test 1" #database DB_DRIVER='mysql' DB_HOST=localhost DB_NAME=store DB_USERNAME=store DB_PASSWORD=''
解决方案
修正环境变量名称不匹配:数据库配置中
host使用的是getenv('HOST'),但.env文件里对应的变量是DB_HOST,需修改为:'host' => getenv('DB_HOST'),处理.env文件的引号问题:当前.env里
DB_DRIVER='mysql'的单引号会被当作值的一部分,导致获取到的driver是'mysql'而非mysql,甚至部分env加载脚本会解析失败。去掉所有值的引号:DB_DRIVER=mysql DB_PASSWORD=确保.env文件被正确加载:检查
_env.php的实现,确保它能正确解析.env文件,以下是可靠的基础实现(替换原有内容):<?php $envPath = __DIR__ . '/../../.env'; // 确认路径是否指向你的.env文件 if (file_exists($envPath)) { $lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach ($lines as $line) { if (strpos(trim($line), '#') === 0) continue; list($key, $value) = explode('=', $line, 2); $key = trim($key); $value = trim($value); $value = trim($value, "'\""); // 移除首尾的单/双引号 putenv("$key=$value"); $_ENV[$key] = $value; } }验证环境变量是否生效:在Database类构造函数开头添加调试代码,确认变量是否正确获取:
var_dump( getenv('DB_DRIVER'), getenv('DB_HOST'), getenv('DB_NAME') ); exit;运行项目后查看输出,若仍为空,检查
_env.php的引入路径是否正确。确认PHP数据库扩展已启用:确保Laragon环境中已启用
pdo_mysql或mysqli扩展,可通过Laragon的「PHP」菜单快速启用,或通过phpinfo()查看扩展状态。
内容的提问来源于stack exchange,提问作者CodeWithVirag
相关产品推荐
相关产品推荐

