PHP 工匠返回拒绝访问 Laravel 中的数据库连接

Posted

技术标签:

【中文标题】PHP 工匠返回拒绝访问 Laravel 中的数据库连接【英文标题】:PHP artisan returns access denied for database connection in Laravel 【发布时间】:2019-11-11 15:18:45 【问题描述】:

我转移了一个基于moving Laravel project between computers的Laravel项目 乍一看,一切都很好。我可以毫无问题地安装作曲家,然后在我的 .env 中设置我的环境变量,例如数据库名称、数据库用户等。

当我开始使用以下命令时,

php artisan cache: clear

我遇到了这两个错误,

在 Connection.php 第 664 行: SQLSTATE[HY000] [1045] 用户 'root'@'localhost' 的访问被拒绝(使用密码:是)(SQL:从 information_schema.tables 中选择 *,其中 tabale_schema = *** 和 table_name = ****)

在 Connector.php 第 67 行: SQLSTATE [HY000] [1045] 用户'root'@'localhost'的访问被拒绝(使用密码:是)

更多信息:

    似乎 .env 没有被应用程序读取,因为当我浏览应用程序的主页时,我得到了糟糕的错误,显示环境变量为空。 我测试了我的数据库连接,例如它的用户名、密码和其他参数,我知道它们工作正常。

最后我附上一张照片来说明问题。

    有趣的是,在我的 .env 文件中,DB_DATABASE 值为“nlp”,DB_USERNAME 等于“Javad”,但正如您在错误中看到的那样,它们不起作用,Artisan 假定 root 为用户!

【问题讨论】:

新环境下有数据库和数据库用户吗? 我用用户名和密码成功进入数据库,然后我得到了数据库列表,最后我可以看到我正在处理的数据库的名称! 尝试手动删除配置缓存。为此,请删除:bootstrap/cache/config.php(或重命名以保留它作为备份)。 您能否提供从开始到出现错误的确切步骤?您是否安装了完全相同版本的软件包,或者您重新安装了 Laravel 和更多旧代码?你使用的是哪个版本的 Laravel? 【参考方案1】:

将 Laravel 项目移动到另一个位置后,您要做的第一件事是通过从应用程序根目录运行命令在 .env 文件中重新生成 APP_KEY

php artisan key:generate

之后,您重新配置缓存:

php artisan config:cache

此外,请确保您的 .env 文件和 config/database.php 中的所有数据库参数都是正确的,并且与您之前的 Laravel 设置相同 - 您可以手动更改它们,然后如上所示重新配置您的缓存。如果没有(例如,数据库名称已更改),您可能需要再次重新运行数据库迁移和播种器:

php artisan migrate

php artisan db:seed

【讨论】:

我在我的进一步信息的第二部分中提到了我测试了数据库连接并且它们工作正常! 从您的帖子来看,这意味着您尚未将用户“Javad”设置为拥有read 访问数据库“nlp”的权限。如果你有 phpmyadmin 或 mysql 工作台,你可以交叉检查。 问题不在于您的.env 文件。您必须通过控制台或任何其他用户界面直接访问您的数据库,并确保有一个名为“Javad”的用户对名为“nlp”的现有数据库架构具有readwrite 访问权限 你使用什么类型的数据库? 老兄,我检查了权限,我将用户授予了我的数据库,并且它拥有对表的 CRUD 的完整权限。【参考方案2】:

考虑到您使用的是 apache,我认为 apache 用户无法写入配置文件。确保您已为用户授予了引导/缓存的写入权限。此目录包含缓存的配置文件。如果是这种情况,将从此处加载祝贺文件,并且将加载您以前使用的配置,这可能会导致问题。

此外,您还需要授予对存储目录的写入权限。因为有日志文件,apache 用户也需要在上面写。

【讨论】:

我将 bootstrap/cache 的权限更改为 777,但我又遇到了同样的错误!【参考方案3】:

打开.env 文件并进行编辑。只需设置正确的数据库凭据:

DB_CONNECTION=mysql 
DB_HOST=127.0.0.1 
DB_PORT=3306 
DB_DATABASE=            // Your Database Name
DB_USERNAME=           // Your Database Username, If no username has been set then by default there is a root as a username
DB_PASSWORD=          // Your Database Password, If no password is set on the database, clear it  

.env编辑完成后请在终端输入此命令清除缓存:

php artisan config:cache

如果仍然存在相同的错误,请尝试其他可能的解决方案。

我也遇到了同样的问题,我在 *** 中尝试了所有可能的答案,但没有任何帮助,这个解决方案在第一次尝试时就奏效了:

如果您使用的是 PHP 的默认 Web 服务器(例如 php artisan serve),您需要在更改 .env 文件值后重新启动服务器。

我从这里laravel.io找到了这个解决方案(阅读Byjml的解决方案)

【讨论】:

在我写的时候,我测试了所有这些步骤,我得到了同样的错误!

以上是关于PHP 工匠返回拒绝访问 Laravel 中的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - Php 工匠语法错误

SQLSTATE[HY000] [2002] 权限被拒绝 Laravel PDO 驱动程序(凭证通过工匠迁移工作)

Laravel - “工匠修补匠” - > mkdir():权限被拒绝

Artisan Migrate 访问被拒绝

laravel 中的 PHP 工匠中间件错误

laravel 4中的工匠命令无法加载php_mcrypt