Hassan Saqib
Hassan Saqib

Reputation: 2757

PDOException (1044) SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'forge'

I am using Laravel 5 and getting the following exception:

PDOException (1044) SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'forge'

My database configuration file is:

<?php

return [
/*
|--------------------------------------------------------------------------
| PDO Fetch Style
|--------------------------------------------------------------------------
|
| By default, database results will be returned as instances of the PHP
| stdClass object; however, you may desire to retrieve records in an
| array format for simplicity. Here you can tweak the fetch style.
|
*/

'fetch' => PDO::FETCH_CLASS,

/*
|--------------------------------------------------------------------------
| Default Database Connection Name
|--------------------------------------------------------------------------
|
| Here you may specify which of the database connections below you wish
| to use as your default connection for all database work. Of course
| you may use many connections at once using the Database library.
|
*/

'default' => 'mysql',

/*
|--------------------------------------------------------------------------
| Database Connections
|--------------------------------------------------------------------------
|
| Here are each of the database connections setup for your application.
| Of course, examples of configuring each database platform that is
| supported by Laravel is shown below to make development simple.
|
|
| All database work in Laravel is done through the PHP PDO facilities
| so make sure you have the driver for your particular database of
| choice installed on your machine before you begin development.
|
*/

'connections' => [

    'sqlite' => [
        'driver'   => 'sqlite',
        'database' => storage_path().'/database.sqlite',
        'prefix'   => '',
    ],

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

    'pgsql' => [
        'driver'   => 'pgsql',
        'host'     => env('DB_HOST', 'localhost'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset'  => 'utf8',
        'prefix'   => '',
        'schema'   => 'public',
    ],

    'sqlsrv' => [
        'driver'   => 'sqlsrv',
        'host'     => env('DB_HOST', 'localhost'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'prefix'   => '',
    ],

],

/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/

'migrations' => 'migrations',

/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer set of commands than a typical key-value systems
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

'redis' => [

    'cluster' => false,

    'default' => [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ],

    ],

];

How can I solve it?

Upvotes: 11

Views: 103332

Answers (13)

Alemoh Rapheal Baja
Alemoh Rapheal Baja

Reputation: 762

If the credentials are correct. For cpanel database setup, check if there's a user with privileges to the database for the application.

enter image description here

Upvotes: 0

Ariton
Ariton

Reputation: 27

take these steps and you will be fine!

copy those from your .env.example file to your .env file :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=YOUR_DATABASE_NAME
DB_USERNAME=YOUR_DATABASE_USERNAME
DB_PASSWORD=YOUR_DATABASE_PASSWORD

save that and stop the server if you have started before. Then write :

php artisan config:cache

next start the server with :

php artisan serve

and you are good to go!

Upvotes: 0

Samuel Ramzan
Samuel Ramzan

Reputation: 1856

Had the same problem after changing the ownership of the account, so I ended up doing the following:

(This worked for me)

Take note of your actual user and password Go to your cPanel (that is if you're using cPanel) From Databases tab, select MySQL Databases. Navigate to the Current Users Delete the user that corresponds to the database You are having conflict with. After deletion, go to the Add User to Database Tab and reenter the username and password, this will regenerate the connection with the current owner privileges.

Upvotes: 1

Siraj Ali
Siraj Ali

Reputation: 604

This issue also occur when you use multiple databases in same project/query

I had the same issue solved by using same DB_USERNAME for all databases , because i was use multiple databases in same project and every database DB_USERNAME was different so when i run the query select,update, delete etc from multiple database then was get this error.

because if you use more then one table in query and the database DB_USERNAME is different you will get this error.

Solution:

If you using/connect more then one databases then you should use same DB_USERNAME for all databases

Upvotes: 0

Premium Ayodele
Premium Ayodele

Reputation: 407

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=YOUR_DATABASE_NAME
DB_USERNAME=root
DB_PASSWORD=

The DB_USERNAME= should be set to root if you do not have a default username in the installation of MySQL in XAMPP.

Upvotes: 2

Harsh Pawar
Harsh Pawar

Reputation: 42

If you don't require login while accessing the database

Try database username as root and password field leave blank

This solves my problem

Upvotes: -1

Udhav Sarvaiya
Udhav Sarvaiya

Reputation: 10061

We forgot to set DB_USERNAME= in the .env file, so we got this error:

SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database 'forge'

Open the .env file and edit it. Just set up correct DB credentials:

DB_USERNAME=         //Your Database Username           

DB_USERNAME should be set to root if you do not have a default username in the installation time

After changes of .env enter this command in your terminal for clear cache:php artisan config:cache


NOTE: If there is still error

If you are using the PHP's default web server (eg. php artisan serve) you need to restart your server

OR

If you have used XAMPP then restart your Apache server

Upvotes: 3

raeeschaudhary
raeeschaudhary

Reputation: 45

I was getting the same message with empty username. The username was always blank.

The issue was with MySQL. The SQLSTATE error message is being passed directly from MySQL.

So then I deleted the database and user. Re-created the database in the Databases tab of PhpMyAdmin. And importantly separately added the user and privileges. This fixed the issue.

I could connect from the MySQL client and run migrations.

Upvotes: 0

David Segura
David Segura

Reputation: 1

This problem can be caused by the file not having the expected ".env" extension.

If you have file extensions hidden in Windows (which is on by default), then it can easily look like the extension is ".env", when it is actually something like, like ".env.txt".

This means that the program won't be able to find your ".env" file because it doesn't have the right extension.

Open the file with an editor like Sublime Text, and you'll see what the actual extension is. If it has a ".txt" extension, delete that part and re-save.

Upvotes: 0

Ariful Haque
Ariful Haque

Reputation: 3750

Put a .env file in your root directory and paste this code there.

APP_ENV=local
APP_DEBUG=true
APP_KEY=1CaND3OKKvOGSBAlCg6IyrRmTQWwZjOO

DB_HOST = localhost
DB_DATABASE = YOUR_DATABASE_NAME
DB_USERNAME = USER_NAME
DB_PASSWORD = PASSWORD

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Update your database, username and password field here and it should solve your problem. In your configuration file env() function is looking for this file and variables from here.

UPDATE: You must create a blank database before running the app or migration.

Upvotes: 8

Krishneil
Krishneil

Reputation: 1490

Sometime in the future. This will be a basic setup if using MySQL instead of Homestead. Config->database.php file

'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'yourDatabaseName'),
        'username'  => env('DB_USERNAME', 'root'),
        'password'  => env('DB_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

and in your .env file

APP_ENV=local
APP_DEBUG=true
APP_KEY=ruA9CAKRJCFgLOD1nc5o1BmvaTGokasi

DB_HOST=localhost
DB_DATABASE=yourDatabaseName


CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

and if you run the command it should work smoothly.

Upvotes: 1

Try to go to database.php file correct your database name,username and password

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | PDO Fetch Style
    |--------------------------------------------------------------------------
    |
    | By default, database results will be returned as instances of the PHP
    | stdClass object; however, you may desire to retrieve records in an
    | array format for simplicity. Here you can tweak the fetch style.
    |
    */

    'fetch' => PDO::FETCH_OBJ,

    /*
    |--------------------------------------------------------------------------
    | Default Database Connection Name
    |--------------------------------------------------------------------------
    |
    | Here you may specify which of the database connections below you wish
    | to use as your default connection for all database work. Of course
    | you may use many connections at once using the Database library.
    |
    */

    'default' => env('DB_CONNECTION', 'mysql'),

    /*
    |--------------------------------------------------------------------------
    | Database Connections
    |--------------------------------------------------------------------------
    |
    | Here are each of the database connections setup for your application.
    | Of course, examples of configuring each database platform that is
    | supported by Laravel is shown below to make development simple.
    |
    |
    | All database work in Laravel is done through the PHP PDO facilities
    | so make sure you have the driver for your particular database of
    | choice installed on your machine before you begin development.
    |
    */

    'connections' => [

        'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'msm'),----database name
            'username' => env('DB_USERNAME', 'root'),--localhost username
            'password' => env('DB_PASSWORD', ''),--localhost password
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

        'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'msm'),----database name
            'username' => env('DB_USERNAME', 'root'),--localhost username
            'password' => env('DB_PASSWORD', ''),--localhost password
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ],

    ],

    /*
    |--------------------------------------------------------------------------
    | Migration Repository Table
    |--------------------------------------------------------------------------
    |
    | This table keeps track of all the migrations that have already run for
    | your application. Using this information, we can determine which of
    | the migrations on disk haven't actually been run in the database.
    |
    */

    'migrations' => 'migrations',

    /*
    |--------------------------------------------------------------------------
    | Redis Databases
    |--------------------------------------------------------------------------
    |
    | Redis is an open source, fast, and advanced key-value store that also
    | provides a richer set of commands than a typical key-value systems
    | such as APC or Memcached. Laravel makes it easy to dig right in.
    |
    */

    'redis' => [

        'cluster' => false,

        'default' => [
            'host' => env('REDIS_HOST', 'localhost'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => 0,
        ],

    ],

];

Upvotes: 0

Carlos Avalos
Carlos Avalos

Reputation: 247

You can check the current environment with: php artisan env

next

  • create under config/development | staging (folder)
  • save a file database.php with development | staging access
  • edit .env file APP_ENV=development | staging | production

Upvotes: 0

Related Questions