Laravel 8部署至Namecheap共享主机报could not find driver问题求助
Laravel 8 Namecheap共享主机could not find driver报错排查方案
- 确认项目对应PHP版本的PDO_MYSQL扩展已启用
Namecheap共享主机支持多PHP版本共存,你通过phpinfo()查看的版本可能和Laravel实际运行使用的版本不一致。在项目根目录新建
pdodriver.php文件写入以下代码,访问后查看实际加载的PDO驱动:<?php print_r(PDO::getAvailableDrivers()); ?>如果输出结果中没有
mysql,前往cPanel「选择PHP版本」页面,选中你网站绑定的PHP版本,勾选pdo_mysql扩展后保存。
- 校验.env数据库配置
确保.env文件中数据库连接配置正确,不要出现拼写错误:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=你的数据库名 DB_USERNAME=你的数据库用户名 DB_PASSWORD=你的数据库密码
如果配置无误仍报错,可新增一行socket配置适配共享主机环境:
DB_SOCKET=/tmp/mysql.sock
- 清除Laravel配置缓存
部署后旧的配置缓存会导致新修改的配置不生效,有SSH权限的情况下在项目根目录执行:
php artisan config:clear php artisan cache:clear
无SSH权限可临时在routes/web.php添加路由触发清除:
Route::get('/clear-all-cache', function () { Artisan::call('config:clear'); Artisan::call('cache:clear'); return "缓存已清理,可删除该路由"; });
访问该路由生效后务必删除对应代码,避免安全风险。
- 检查数据库用户权限
前往cPanel「MySQL数据库」页面,确认.env中填写的数据库用户已经绑定到对应数据库,且授予了全部读写权限。 - 原生PDO测试连接
新建dbtest.php文件用原生PDO验证连接是否正常:
<?php $host = '127.0.0.1'; $db = '你的数据库名'; $user = '你的数据库用户名'; $pass = '你的数据库密码'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); echo "数据库连接正常,驱动加载无误"; } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } ?>
如果该测试仍报驱动错误,直接联系Namecheap技术支持核查对应PHP版本的pdo_mysql扩展是否存在安装损坏。
内容的提问来源于stack exchange,提问作者CJ Uday
相关产品推荐
相关产品推荐

