MySQL пароль в файле .env не работает, но отлично работает в базе данных. php (env () кэширует старый пароль, config: clear не удаляет его) - PullRequest
0 голосов
/ 11 января 2020

Я получаю ошибку 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');"

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Если вы находитесь на локальном сервере, не забудьте перезапустить ваш локальный сервер.

Чтобы перезапустить, вы можете просто ^C в своем серверном терминале и повторно выполнить php artisan serve.

0 голосов
/ 11 января 2020

Решение состоит в том, чтобы установить файл .env следующим образом:

DB_DATABASE = laravel_test

DB_USERNAME = dba

DB_PASSWORD = simplepass1000

Переменная DB_PASSWORD не имеет кавычек

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...