Я получаю ошибку SQLSTATE[HY000] [1045] Access denied for user
при использовании файла .env.
Я подтвердил, что учетные данные работают - я могу подключиться с помощью MySQL Workbench.
I ' м с использованием XAMPP на Windows и Laravel 6.2. У меня та же проблема при запуске сайта с использованием php artisan serve
.
Я проверил учетные данные в MySQL Workbench. Я даже проверил учетные данные, комментируя строку пароля в config / database. php и жестко кодируя пароль.
Кажется, проблема в том, как я объявляю DB_PASSWORD в моем файле .env (DB_DATABASE и DB_USERNAME работают нормально.) Я пробовал одинарные и двойные кавычки (как и другие примеры в файле .env). Ни один из вариантов не работает , Я попытался использовать пользователя root без пароля, но он тоже не работает.
Это ошибка, которую я получаю, когда пытаюсь использовать файл .env для учетных данных:
SQLSTATE[HY000] [1045] Access denied for user 'dba'@'localhost' (using password: YES)
Или (для других, ищущих через пример общего учебного кода):
SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)
Если я введу пароль в config / database. php - он отлично работает. Что я делаю неправильно? Я попытался остановить службу Apache в XAMPP, а затем запустить эти команды для Laravel:
php artisan cache:clear
php artisan config:clear
php artisan config:cache
Но без кубиков.
Вот мой .env:
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):
'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:
php artisan cache:clear
php artisan config:clear
php artisan config:cache
Однако это не очищает значение env ('DB_PASSWORD'). Я изменил DB_PASSWORD на DB_PASSWORD2 в файле .env, и это решило мою проблему:
DB_PASSWORD2=simplepass1000
config / database. php:
'password' => env('DB_PASSWORD2', ''),
Я до сих пор не уверен, где это старое значение env () исходит из. Я сделал grep'ed на своем сайте и не вижу его ни в одном кодовом файле, так что это должно быть откуда-то на моей машине.
Кажется, что значение env загружено из моей среды, потому что я получаю то же значение, когда за пределами Laravel веб-сайта:
$ php -r "echo getenv('DB_PASSWORD');"
Я попытался putenv (), чтобы сбросить это переменная, но это не работает:
$ php -r "echo putenv('DB_PASSWORD=test');"