Laravel 5 数据库问题

24

我使用以下命令成功安装了 Laravel 5:

composer create-project laravel/laravel test-laravel-5-project dev-develop --prefer-dist

我甚至使用命令php artisan -V验证了已安装的Laravel版本。输出为:

Laravel Framework version 5.0-dev

然后我去了 app/config/database.php,将默认数据库设置为mysql,并进行以下配置

'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', 'Logintestfive'), 'username'=> env('DB_USERNAME', 'root'), 'password'=> env('DB_PASSWORD', 'manasa'), 'charset'=> 'utf-8', 'collation'=> 'utf-8_unicode_ci', prefix=> '', 'strict'=> false, ]

然后我访问了localhost:8000/auth/register,填写了表单并提交了数据,但是我收到了以下错误信息:

PDOException in Connector.php line 47: SQLSTATE[28000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)

但是我既没有使用 laravel homestead 在我的系统中安装 laravel 5,也没有使用 vagrant 来设置 laravel homestead。它告诉我像这样:

in Connector.php line 47
at PDO->__construct('mysql:host=localhost;dbname=homestead', 'homestead', 'secret', array('0', '2', '0', false, '0')) in Connector.php line 47
at Connector->createConnection('mysql:host=localhost;dbname=homestead', array('driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'name' => 'mysql'), array('0', '2', '0', false, '0')) in MySqlConnector.php line 20
at MySqlConnector->connect(array('driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'name' => 'mysql')) in compiled.php line 10545
at ConnectionFactory->createSingleConnection(array('driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'name' => 'mysql')) in compiled.php line 10541
at ConnectionFactory->make(array('driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false), 'mysql') in compiled.php line 10459

我该怎么解决这些问题?


当我在Laravel 5中使用pgsql驱动程序时,我收到相同的错误。我正在使用Homestead,一切都应该是开箱即用的。我对.env和database.php配置文件使用默认设置。但是,当使用mysql时,这个问题并不会出现。 - Gooshan
1
你可以尝试运行 php artisan env 命令来查看你的环境,如果是本地环境,那么你应该使用正确的凭据更新你的 .env 文件,否则只需要按照你的 database.php 文件配置即可正常工作。 - Dimitri Acosta
13个回答

48

我遇到了类似的问题。我使用 php artisan serve 命令启动了我的服务器,并编辑了 .env 文件,刷新网页后没有反映出任何更改!

我通过停止Web服务器、编辑 .env.php 文件并重新启动Web服务器来解决它!

因此,我猜测这是 .env.php 文件的缓存问题。


谢谢!在阅读了一小时不同博客和文档关于L5环境如何工作的内容后,你终于拯救了我的一天 :-) - FrostyX
这个缓存问题让我熬了一整晚 :( 谢谢,这帮了我很多。 - Gabriel Rodrigues
我也遇到过同样的问题!为此熬了好几个晚上 :D 很高兴能帮助大家解决问题。祝大家编程愉快!;) - Yordi Uytersprot

8

Laravel 5.1.10
如Ganesh和Yordi提供的答案,但我将它们合并为一个。

问题:
当我尝试在phpmyAdmin中创建数据库并通过Laravel模式生成器服务创建架构/表时,我得到以下错误:

PDOException in Connector.php line 50: SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'localhost' (using password: YES)
在Connector.php的第50行
在PDO->__construct('mysql:host=localhost;dbname=homestead', 'homestead', 'secret', array('0', '2', '0', false, '0'))
在Connector.php的第50行
在MySqlConnector.php的第22行使用MySqlConnector->connect(array('driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'name' => 'mysql')).......

解决方案1:
然后我意识到问题在env文件中,我忘记更改env文件中的值。 .env文件位于laravel 5根目录中 打开文件并用你的值更改以下值

DB_DATABASE = localhost,
DB_USERNAME = databse-username,
DB_PASSWORD = databse-user-password

解决方案2:
或像Ganesh所说的那样,在database.php文件中更改env()。

    // instead of this block
    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'your database name'),
        'username'  => env('DB_USERNAME', 'your database username'),
        'password'  => env('DB_PASSWORD', 'your database password'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

    // use this one

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'your database name',
        'username'  => 'your database username',
        'password'  => 'your database password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ]

两种解决方案对我都有效。

6

Laravel使用包含在.env文件中的变量。

参考:http://laravel.com/docs/master/configuration

根据应用程序运行的环境,拥有不同的配置值通常是很有帮助的。例如,您可能希望在本地使用与生产服务器上不同的缓存驱动程序。使用基于环境的配置非常容易。

Laravel利用了Vance Lucas的DotEnv PHP库。在新安装的Laravel中,您的应用程序根目录将包含一个.env.example文件。如果您通过Composer安装Laravel,则该文件将自动重命名为.env。否则,您应该手动重命名该文件。

当应用程序收到请求时,此文件中列出的所有变量都将加载到$_ENV PHP超全局变量中。您可以使用“env”助手从这些变量中检索值。实际上,如果您查看Laravel配置文件,您会注意到几个选项已经使用此助手!

随意根据需要修改您的环境变量,以适应您自己的本地服务器以及生产环境。但是,您的.env文件不应提交到应用程序的源代码控制中,因为每个使用您的应用程序的开发人员/服务器可能需要不同的环境配置。

如果您正在与团队开发,请继续在应用程序中包含.env.example文件。通过在示例配置文件中放置占位符值,您团队中的其他开发人员可以清楚地看到运行应用程序所需的哪些环境变量。

默认的.env文件类似于:

APP_ENV=local
APP_DEBUG=true
APP_KEY=YOUR_KEY_HERE

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file

那是很好的解释 :) 我像这样更改了我的.env文件:`APP_ENV=local APP_DEBUG=true APP_KEY=YOUR_KEY_HEREDB_HOST=localhost DB_DATABASE=loginlaravel5 DB_USERNAME=root DB_PASSWORD=manasaCACHE_DRIVER=file SESSION_DRIVER=file`。但我仍然得到相同的错误。 - Ajay Kulkarni
你是否已经恢复了 app/config/database.php 文件以使用在 .env 文件中设置的变量? - ajtrichards
是的。我的 app/config/database.php 文件长这样: 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'database' => env('DB_DATABASE', ''), 'username'=> env('DB_USERNAME', ''), 'password'=> env('DB_PASSWORD', ''), 'charset'=> 'utf-8', 'collation'=> 'utf-8_unicode_ci', prefix=> '', 'strict'=> false, ] - Ajay Kulkarni
可能有另一个.env文件覆盖了你的设置。如果你使用的是Linux或OS X,打开终端并切换到你的安装路径,然后输入:nano .env*,这将打开所有的env文件,你可以看到它正在使用哪一个。 - ajtrichards
我正在使用 Linux 操作系统,我执行了 vim .env* 命令并得到了两个文件:.env.env.example。我也在 .env.example 文件中添加了数据库配置信息。但是我仍然遇到了相同的错误。 - Ajay Kulkarni
遇到了同样的错误。检查了我的.env文件,发现问题所在。真应该在database.php文件中加上注释。在L4版本中,你只需要编辑那个文件就可以了。现在看起来一模一样,你编辑它却没有任何反应... - hfingler

3

Laravel使用.env文件,所以可以在不使用env()的情况下更改.env文件或数据库.php文件中的内容。

'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'your database name',
        'username'  => 'your database username',
        'password'  => 'your database password',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ]

3

我遇到了同样的问题。在使用命令 "php artisan config:clear" 清除旧的配置缓存文件之后,它就能够工作了。也许你可以试试。

顺便说一下,我的英语不好,希望你能理解。


3
在 Config->database.php 中。
'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'DBName'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],

在 .env 文件中:
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=DBName
DB_USERNAME=root
DB_PASSWORD=

关闭 Laravel 应用服务器并重新启动,以清除缓存。

  php artisan serve

或者您可以这样做:
  php artisan config:clear

这将清除配置文件中的缓存。

现在它一定会起作用!干杯!


2

Laravel的config/database.php文件使用.env文件来存储数据库名、用户名和密码,请修改您的.env文件。

DB_HOST=localhost

DB_DATABASE=my_project

DB_USERNAME=root

DB_PASSWORD=myproject

修改完成后,请运行以下命令:

composer dump-autoload

然后启动您的项目:

php artisan serve


1
我曾经遇到过非常类似的问题,但不知道该去哪里寻找答案。我清除了缓存,重启了服务器等等,但都没有解决。直到我找到了原因......
在我还使用 Git 存储库上的之前版本时,我的会话驱动程序设置为使用数据库!这是一个愚蠢的错误,但您需要查看的不一定是数据库连接,而是您首次调用要使用的数据库位置。
希望那些像我一样来到这个页面的人能从中受益。

如果您没有使用数据库,但仍然遇到数据库连接错误,那么可能是您的会话驱动程序配置为使用数据库!这就是让我陷入类似问题的诱因。如果是这样,请将其设置为“file”等,您就可以解决问题了。 - Barnabas Kecskes

0
在你的Laravel中,例如c:/www/laravel,创建一个名为'local'的新目录,位于app/config下。复制database.php文件(app/config/database.php)。这对我有效。

0

你可以重新启动你的服务器。我认为这是 Laravel 的一个错误,所以用“php artisan serve”再次运行你的服务器,然后刷新你的网页,就没问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接