Я новичок в PHP и CakePHP. Поиск проблем при подключении моей базы данных с помощью CakePhp.
Ниже приведена конфигурация моего приложения. Я нахожусь в стеке битномов WAMP 5.4.40-0. Я использую CakePhp 3.0.4 для создания приложения web mvc
Запись для источников данных в My app.php file
/** * Connection information used by the ORM to connect * to your application's 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. Пользователь test2 имеет глобальные привилегии так же, как и root admin.
Но когда я запускаю всю команду. Я получаю следующую ошибку
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. Теперь моя заявка выпекается 🙂
Это сообщение об ошибке обычно означает, что либо пароль, который вы используете, не соответствует тому, что 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'
Проверьте следующие вещи
Если вы используете MAMP, вам может потребоваться установить сокет: unix_socket: /Applications/MAMP/tmp/mysql/mysql.sock