Laravel 5错误 SQLSTATE[HY000] [1045],用户“homestead”@“localhost”被拒绝访问(使用密码:YES)

53

我已成功安装了Laravel 5,并在配置目录中的database.php文件中更改了MySQL凭据为

mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'wdcollect'),
            'username'  => env('DB_USERNAME', 'root'),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

我不想使用Homestead,已经修改了.env文件为:

APP_ENV=local
APP_DEBUG=true
APP_KEY=apLIzEMOgtc5BUxdT9WRLSvAoIIWO87N

DB_HOST=localhost
DB_DATABASE=wdcollect
DB_USERNAME=root
DB_PASSWORD=

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

我不明白为什么会显示“homestead@localhost”的访问被拒绝。


1
你是否在mysql中检查了该用户的权限? - beresfordt
个人建议使用 mysql 命令在命令行上尝试使用这些凭据进行连接。然后以 root 身份登录,验证该用户是否被授权连接到本地主机,并在必要时重置应用程序正在使用的用户的密码。 - beresfordt
创建一个新用户并将该用户分配给数据库有助于托管服务器。此外,按照以下建议进行缓存和配置清除。 - Reejesh PK
32个回答

57

我也遇到了同样的问题。一切都很顺利,但在

bootstrap/cache/config.php

文件中总是缺少密码部分。经过深入挖掘,发现密码中有 '#' 字符,这是导致密码残缺的原因。因为 '#' 被用作注释标记。


3
你也可以将你的密码放在双引号内。 - LipeTuga
1
这真是一针见血!我在从Laravel 5.5升级到5.8时遇到了完全相同的问题,同样的数据库凭据没有给我权限。 - Amit Shah
1
你的 '#' 想法解决了我的问题,我从没想过那会是问题所在。谢谢! - Badr
这确实是精准的。我只需将我的密码放在config\database.php文件中,它就可以工作了。 - azm_shah

53

现在它正在运作。我不得不重新启动服务器。 谢谢


我曾经遇到过同样的问题,后来自动解决了。我感觉 Laravel 的最新更新修复了这个问题,你有同感吗? - gsk
4
重新启动,就会恢复正常。天啊! - SRENG Khorn
谢谢你分享你的答案。我刚遇到了同样的问题,重启了服务器,现在它可以工作了! - William
我重新启动了PHP Web服务器。 - Ali Rehman
我刚遇到了同样的问题,重启服务器使用 php artisan serve 命令,现在它可以工作了! - Sampath
显示剩余3条评论

35
我花了好几个小时 :-(,结果很容易就被黑客攻击了。

AFTER

我花费数小时 :-( ,最终,它被黑客轻松破解。
DB_PASSWORD=#Root2020$

更新

DB_PASSWORD="#Root2020$"

我认为问题出在密码中的#号,这就是为什么我不得不将我的密码用引号括起来的原因。


1
谢谢,它解决了我的问题(在本地开发中使用laravel 8.35),即使没有特殊字符! - bcag2
曾经在那里...已经完成 - Tiago Mateus
似乎哈希表引起了这个问题。该死! - Ezequiel Fernandez
许多坦克;我简直不敢相信我会忘记那个... - Mehran

33

你需要运行这两个命令

php artisan cache:clear
php artisan config:cache

21

在共享主机上部署我的网站时,这些方法都没有对我起作用,下面是我所做的操作:

.env文件中,我进行了以下更改:

DB_HOST=127.0.0.1

需要翻译的内容:

to

DB_HOST=localhost

并且,哇,它像预期的那样运行良好。


此外,您可以检查其他数据是否正确,至少在我的情况下,我的密码是错误的。谢谢! - Mateus Gonçalves
我猜不出来。它在之前的服务器上使用127.0.0.1可以工作,但在新服务器上无法工作。所以,通过这个答案,我解决了我的问题。非常感谢。 - Recep Gümüş
在 Laravel 8 环境下对我有效,点赞! - Tenarius

16

如果您之前使用了localhost和root,那么您的文件已经被缓存。

请删除 /bootstap/cache/config.php 文件。


11
这对我有用:
php artisan config:clear
php artisan cache:clear
php artisan config:cache

谢谢。


8
我遇到了同样的问题,所以我意识到 .env 文件不接受特殊字符,因为我的密码包含这些字符,所以我把密码加到了 config/database.php 文件中。

非常感谢,我添加了双引号“my_password”,现在它可以正常工作了! - bravohex
谢谢,这对我也有用,我还在.env文件中添加了双引号作为我的密码,我的密码中还使用了特殊字符。 - Sujeet malvi

8

天啊! 感谢umair.ashfr在下面的回答中,我终于找到了一个一直困扰我的问题。

我在.env文件中有一个像这样的密码: DB_PASSWORD=ffjdh5#fgr MySQL连接无论我尝试运行哪种类型的php artisan,都会优雅地显示“SQLSTATE [HY000] [1045]用户拒绝访问...”。

问题是密码中有"#"号。 小心!那是一个注释的开头,因此我的密码被悄悄截断了! 解决方法是将密码声明为 DB_PASSWORD="ffjdh5#fgr"

问候


谢谢。它对我有用。问题出在#号上。当我将#作为数据库密码在env中使用时,就会显示这个错误。去掉密码中的#后,它现在可以正常工作了。 - Riaz Mahmud

5

我遇到了同样的问题,我做了以下操作:

  1. 运行命令:php artisan cache:clear
  2. 运行命令:php artisan config:cache

不过还是没有解决问题,然后我尝试了下面这个artisan命令:

php artisan view:clear

希望这个解决方法能够有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接