I am new to PHP and CakePHP. I am finding problems while wiring my database using CakePHP.
Below is my application configuration.
I am on Bitnami WAMP stack 5.4.40-0. I am using CakePHP 3.0.4 to create a web MVC application
Entry for datasources in 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'],     ],   I have already created a database table called jobs according to CakePHP conventions. User test2 has global privileges the same as the root administrator.
But when I am running the bake all command, I am getting the following error:
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()   PROBLEM SOLVED (UPDATE)
I followed Ankit and Spencer's directions.
I had a couple of problems.
Host of my user was not localhost; it was a wildcard %. Changed that, then MySQL started refusing connections.
I disabled my firewall and found that the port was different from 3306. So I changed the entry in app.php. Now my application is baked :)
That error message usually means that either the password we are using doesn't match what MySQL thinks the password should be for the user we're connecting as, or a matching MySQL user doesn't exist (hasn't been created).
In MySQL, a user is identified by both a username ("test2") and a host ("localhost").
The error message identifies the user ("test2") and the host ("localhost") values...
  'test2'@'localhost'   We can check to see if the user exists, using this query from a client we can connect from:
 SELECT user, host FROM mysql.user   We're looking for a row that has "test2" for user, and "localhost" for host.
 user     host         -------  -----------  test2     127.0.0.1  cleanup  test2     ::1          test2     localhost     If that row doesn't exist, then the host may be set to wildcard value of %, to match any other host that isn't a match.
If the row exists, then the password may not match. We can change the password (if we're connected as a user with sufficient privileges, e.g. root
 SET PASSWORD FOR 'test2'@'localhost' = PASSWORD('mysecretcleartextpassword')   We can also verify that the user has privileges on objects in the database.
 GRANT SELECT ON jobs.* TO 'test2'@'localhost'    EDIT
If we make changes to mysql privilege tables with DML operations (INSERT,UPDATE,DELETE), those changes will not take effect until MySQL re-reads the tables. We can make changes effective by forcing a re-read with a FLUSH PRIVILEGES statement, executed by a privileged user.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With