SQLSTATE [HY000] [1045] Доступ запрещен для пользователя "имя пользователя" @ "localhost" с использованием CakePhp

Я новичок в PHP и CakePHP. Поиск проблем при подключении моей базы данных с помощью CakePhp.

Ниже приведена конфигурация моего приложения. Я нахожусь на стеке Битнами Битма 5.4.40-0. Я использую CakePhp 3.0.4 для создания веб-приложения mvc

Запись для источников данных в My app.php file

/**
 * Connection information used by the ORM to connect
 * to your application datastores.
 * Drivers include Mysql Postgres Sqlite Sqlserver
 * See vendor\cakephp\cakephp\src\Database\Driver for complete list
 */
'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'nonstandard_port_number',
        'username' => 'test2',
        'password' => 'computer',
        'database' => 'jobs',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,

        /**
         * Set identifier quoting to true if you are using reserved words or
         * special characters in your table or column names. Enabling this
         * setting will result in queries built using the Query Builder having
         * identifiers quoted when creating SQL. It should be noted that this
         * decreases performance because each query needs to be traversed and
         * manipulated before being executed.
         */
        'quoteIdentifiers' => false,

        /**
         * During development, if using MySQL < 5.6, uncommenting the
         * following line could boost the speed at which schema metadata is
         * fetched from the database. It can also be set directly with the
         * mysql configuration directive 'innodb_stats_on_metadata = 0'
         * which is the recommended value in production environments
         */
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
    ],

Я уже создал таблицу базы данных, называемую заданиями, в соответствии с соглашениями CakePhp. Пользовательский тест2 имеет глобальные привилегии, такие же как и администратор root.

Но когда я запускаю команду bake all. Я получаю следующую ошибку:

2015-07-01 06:24:56 Error: [PDOException] SQLSTATE[HY000] [1045] Access denied for user 'test2'@'localhost' (using password: YES)
Stack Trace:
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\PDODriverTrait.php(48): PDO->__construct('mysql:host=127....', 'test2', 'computer', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Driver\Mysql.php(89): Cake\Database\Driver\Mysql->_connect('mysql:host=127....', Array)
C:\Bitnami\wampstack-5.4.40-0\apache2\htdocs\myjobs\vendor\cakephp\cakephp\src\Database\Schema\BaseSchema.php(46): Cake\Database\Driver\Mysql->connect()

ПРОБЛЕМА РЕШЕНА (ОБНОВЛЕНИЕ)

Я следовал указаниям Анкита и Спенсера.

У меня было несколько проблем.

  • Хост моего пользователя не был localhost, он был подстановочным знаком%. Изменено это, затем mysql начал отказываться от соединений.

  • Я отключил свой брандмауэр и обнаружил, что порт отличается от 3306. Так что изменилась запись в app.php. Теперь мое приложение запечено:)

Ответ 1

Это сообщение об ошибке обычно означает, что либо используемый вами пароль не совпадает с тем, что MySQL считает паролем для пользователя, которого вы подключаете, либо соответствующий пользователь MySQL не существует (не был создан).

В MySQL пользователь идентифицируется как именем пользователя (test2), так и хостом (localhost).

Сообщение об ошибке, которое вы получаете, идентифицирует значения user (test2) и host (localhost)...

  'test2'@'localhost'

Проверьте, существует ли этот пользователь, используя этот запрос от клиента, из которого вы можете подключиться:

 SELECT user, host FROM mysql.user

Вы ищете строку с test2 для пользователя и localhost для хоста.

 user     host       
 -------  -----------
 test2     127.0.0.1  
 test2     ::1        
 test2     localhost  

Если эта строка не существует, то для хоста может быть установлено значение подстановки %, чтобы соответствовать любому другому хосту, который не соответствует.

Если строка существует, пароль может не совпадать. Вы можете изменить пароль (если вы подключены как пользователь с достаточными привилегиями, например root

 SET PASSWORD FOR 'test2'@'localhost' = PASSWORD('mysecretcleartextpassword')

Также убедитесь, что пользователь имеет привилегии для объектов в базе данных.

 GRANT SELECT ON jobs.* TO 'test2'@'localhost' 

Ответ 2

Проверить следующие вещи

  • Убедитесь, что сервер MySQL работает
  • Проверить соединение с учетными данными по умолчанию, то есть имя пользователя: "root" и пароль: "[Пустой пароль]
  • Попробуйте войти в phpmyadmin с теми же учетными данными
  • Попробуйте поставить 127.0.0.1 вместо localhost или ваш IP-адрес будет делать тоже.
  • Убедитесь, что вы используете MySql на 3306, и если вы настроили, не забудьте указать его при создании соединения.

Ответ 3

Если вы используете MAMP, вам может потребоваться установить сокет: unix_socket:/Applications/MAMP/tmp/mysql/mysql.sock

Ответ 4

Я видел его решение, но я все еще хочу поделиться решением, которое сработало для меня.

.env файл:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=[your database name]
DB_USERNAME=[your mysql username]
DB_PASSWORD=[your mysql password]

mysql admin:

 SELECT user, host FROM mysql.user

спасибо spencer7593

приставка:

php artisan cache:clear
php artisan config:cache

теперь его работы для меня. Ответы Laracasts

Ответ 5

Я хочу добавить к вышеизложенным ответам, что ни одно из предложенных здесь решений не помогло мне. Мой WAMP работает над портом 3308 вместо 3306, который по умолчанию установлен. Я узнал, что при работе в локальной среде, если вы используете mysqladmin на своем компьютере (для среды тестирования), и если вы работаете с портом, отличным от 3306, вы должны определить свою переменную DB_SERVER со значением localhost: NumberOfThePort, поэтому он будет выглядеть следующим образом: define ( "DB_SERVER", "localhost: 3308" ). Вы можете получить это значение, щелкнув правой кнопкой мыши значок WAMP на панели задач (в разделе скрытых значков) и выберите "Инструменты". Вы увидите раздел: "Порт, используемый MySQL: NumberOfThePort"

Это исправит ваше соединение с вашей базой данных.

Это была ошибка, которую я получил: Ошибка: SQLSTATE [HY1045] Доступ запрещен для пользователя "имя пользователя" @ "localhost" в строке X.

Надеюсь, это поможет вам.

:)