首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.env文件中的配置密码不起作用,但在database.php中工作正常(env()缓存旧密码,MySQL :clear不会将其删除)

.env文件中的配置密码不起作用,但在database.php中工作正常(env()缓存旧密码,MySQL :clear不会将其删除)
EN

Stack Overflow用户
提问于 2020-01-11 14:09:48
回答 3查看 3.3K关注 0票数 0

在使用.env文件时,我收到一个SQLSTATE[HY000] [1045] Access denied for user错误。

我已确认凭据正在工作--我可以使用MySQL工作台进行连接。

我在Windows和Laravel 6.2上使用XAMPP。使用php artisan serve运行站点时,我也遇到了同样的问题。

我已经在MySQL工作台中测试了凭据。我甚至通过注释掉config/database.php中的密码行并硬编码密码来测试凭据。

问题似乎出在我在.env文件中声明DB_PASSWORD的方式(DB_DATABASE和DB_USERNAME可以很好地工作)。我尝试过使用单引号和双引号(就像.env文件中的其他示例一样),这两种方法都不起作用。我尝试使用没有密码的root用户,但也不起作用。

这是我尝试使用.env文件作为凭据时得到的错误:

代码语言:javascript
复制
SQLSTATE[HY000] [1045] Access denied for user 'dba'@'localhost' (using password: YES)

或者(对于通过通用教程代码示例进行搜索的其他人):

代码语言:javascript
复制
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)

如果我在config/database.php中输入密码--它工作得很好。我做错了什么?我尝试在XAMPP中停止Apache服务,然后为Laravel运行以下命令:

代码语言:javascript
复制
php artisan cache:clear
php artisan config:clear
php artisan config:cache

但没有骰子。

这是我的.env:

代码语言:javascript
复制
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_test
DB_USERNAME=dba
DB_PASSWORD="simplepass1000"

下面是config/database.php (使用硬编码密码,不使用从env加载的密码):

代码语言:javascript
复制
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
//            'password' => env('DB_PASSWORD', ''),
            'password' => 'simplepass1000',
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_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'),
            ]) : [],
        ],

更新:为了更好地调试这个问题,我将env('DB_PASSWORD','')变量打印到一个视图中(它也放在日志文件中,所以我应该先检查那里)。这是一个旧密码,所以不是我试图使用的密码。我运行以下命令来重置env:

代码语言:javascript
复制
php artisan cache:clear
php artisan config:clear
php artisan config:cache

但是,这不会清除env('DB_PASSWORD')值。我在.env文件中将DB_PASSWORD更改为DB_PASSWORD2,这解决了我的问题:

代码语言:javascript
复制
DB_PASSWORD2=simplepass1000

config/database.php:

代码语言:javascript
复制
'password' => env('DB_PASSWORD2', ''),

我仍然不确定这个旧的env()值来自哪里。我已经grep了我的网站,在任何代码文件中都看不到它,所以这一定是从我的机器上的某个地方拉出来的。

env值似乎是从我的环境中加载的,因为我在Laravel网站之外获得了相同的值:

代码语言:javascript
复制
$ php -r "echo getenv('DB_PASSWORD');"

我已经尝试了putenv()来重置这个变量,但是这不起作用:

代码语言:javascript
复制
$ php -r "echo putenv('DB_PASSWORD=test');"
EN

Stack Overflow用户

发布于 2021-10-18 00:43:11

如果此密码包含空格,则必须使用:

解决方案是将.env文件设置为:

DB_DATABASE=laravel_test

DB_USERNAME=dba

DB_PASSWORD=“简单通行证1000”

DB_PASSWORD变量没有引号

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59692125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档