【问题标题】:Laravel PDOException SQLSTATE[HY000] [1049] Unknown database 'forge'Laravel PDOException SQLSTATE[HY000] [1049] 未知数据库 'forge'
【发布时间】:2014-07-29 23:11:20
【问题描述】:

我正在使用 Laravel 连接 MySQL 数据库。

我遇到了这个异常:

PDOException
SQLSTATE[HY000] [1049] Unknown database 'forge'

这是我的 config.database.php

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'laravel',
            'username'  => 'Anastasie',
            'password'  => 'A@Laurent',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
        ),

为什么错误指向PDO 数据库?为什么forge 数据库名称?我已经改变了它。

我应该做些什么告诉 Laravel 我正在使用 MySQL 数据库吗?

更新 1

我找到了这条线 protected $table = 'users'; 在我的 user.php 文件中,我已将其更改为 protected $table = 'user'; 因为我数据库中的表是 user 而不是 users

更新 2

我在我的路线中写了这个

Route::resource('users', 'UsersController');

我在我的控制器文件夹中添加了UsersController.php

UsersController.php 里面我有这个:

class UsersController extends BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public function index()
    {
        $users = User::all();
        return View::make('users.index', compact('users'));
    }

我称这个网址为http://localhost:8082/laravel/public/users/

我正在使用带有 Laravel 4.2 的 Windows 7

提前致谢

【问题讨论】:

  • 我们有任何环境配置设置吗?
  • 您是否更改了特定于环境的数据库配置?此外,没有 PDO 数据库之类的东西。 Laravel 默认使用 MySQL,除非你已将其更改为其他类型(例如 PostgreSQL)。
  • @itachi 我确实更改了用户名、密码和数据库名称。
  • @kajetons 我在我的 database.php 配置文件中看到了这一行 'default' => 'mysql',。我从来没有改变过它
  • @Freelancer 清除缓存真的很有帮助。你很棒。你能写下你自己的答案以便接受吗?

标签: php mysql laravel laravel-4


【解决方案1】:

听起来您在某处有一个特定于环境的配置文件,它覆盖了默认数据库设置。可能是 app/config/local/database.php.

【讨论】:

  • 嗨,你想给你所有的database.php内容吗?
  • @AnastasieLaurent 是的,请在原始问题中发帖
  • @Scorpion 用户Freelancer 帮助了我。我不得不清除缓存。现在它正在工作。
  • Martin Bean,感谢您的努力和时间,但用户 Freelancer 帮助了我。最好的问候,
【解决方案2】:

你必须像那样清除缓存(因为你的旧配置在你的缓存文件中):

php artisan cache:clear

pdo 错误来自 Laravel 使用 pdo 驱动连接 mysql 的事实

【讨论】:

    【解决方案3】:

    使用 phpMyAdmin(或任何你喜欢的),我刚刚创建了一个名为“forge”的数据库并重新运行了 php artisan migrate 命令,一切正常。

    【讨论】:

      【解决方案4】:

      多次遇到这个问题,注意我是通过 Vagrant 运行 laravel。所以这里是对我有用的修复:

      • 再试几次(刷新页面)
      • 重新加载流浪者(流浪者重新加载)

      您可以尝试重新加载服务器而不是 vagrant(即 MAMP)

      【讨论】:

        【解决方案5】:

        注意:一旦我不小心在我的数据库名称前有一个空格,例如mydatabase而不是mydatabase,phpmyadmin不会显示空格,但是如果你从mysql的命令行界面运行它,比如mysql -u the_user -p然后show databases,你就可以看到空间了。

        【讨论】:

          【解决方案6】:
          1. 首先您必须创建相关的数据库。
          2. 然后:php artisan cache:clear
          3. 现在运行php artisan migrate:install

          希望您的问题能够得到解决。

          【讨论】:

          • 谢谢。一旦我意识到我试图在 Laravel 和 wampserver 中使用默认端口,这些步骤就帮助我“越界”了。其中一个需要改变!
          【解决方案7】:

          好的,找到解决方案。

          在database.php文件中,默认是“mysql”部分:

           'mysql' => [
                      'driver' => 'mysql',
                      'host' => env('DB_HOST', '127.0.0.1'),
                      'port' => env('DB_PORT', '3306'),
                      'database' => env('DB_DATABASE', 'forge'),
                      'username' => env('DB_USERNAME', 'forge'),
                      'password' => env('DB_PASSWORD', ''),
                      'charset' => 'utf8mb4',
                      'collation' => 'utf8mb4_unicode_ci',
                      'prefix' => '',
                      'strict' => true,
                      'engine' => null,
                  ],
          

          您需要做的就是更改值:

          'database' => env('DB_DATABASE', 'forge'),
          'username' => env('DB_USERNAME', 'forge'),
          

          通过您的数据库名称(如果您没有,则必须创建一个)和该数据库用户名

          喜欢这个

          'database' => env('DB_DATABASE', 'MyDatabase'),
          'username' => env('DB_USERNAME', 'MyUsername'),
          

          【讨论】:

            【解决方案8】:

            确保您在 laravel 文件夹中没有重复的 .env 文件。如果存在,请将其删除。只保留.env 文件。

            【讨论】:

              【解决方案9】:

              有时是因为DB_CONNECTION=mysql 并且您想使用 SQLite 数据库。 一个解决方案是制作DB_CONNECTION=sqlite。希望对你有帮助

              DB_CONNECTION=mysql
              DB_HOST=127.0.0.1
              DB_PORT=3306
              DB_DATABASE=C:\xampp\htdocs\jbtibl\database\database.sqlite
              DB_USERNAME=root
              DB_PASSWORD=
              

              【讨论】:

                【解决方案10】:

                我遇到了同样的问题... 如果您已设置数据库名称和用户名并在 .env 文件中正确传递,但它仍然无法运行终端中的打击代码:(这将清除以前应用程序留下的缓存)

                php artisan cache:clear
                

                然后再次运行命令php artisan serve(如果正在运行,请停止并再次运行)

                【讨论】:

                  【解决方案11】:

                  您需要在文件 .env 中修改数据库的名称(如果需要,在 .env.example 中) 我通过这个小小的修正解决了我的问题。

                  【讨论】:

                  • 也许你没有注意到,但是 OP 提到她改变了她的 .env 文件。
                  【解决方案12】:
                  1. 停止服务器然后运行php artisan cache:clear
                  2. 启动服务器,现在应该可以工作了

                  【讨论】:

                    【解决方案13】:

                    在我的特殊情况下,我终于意识到我的 phpMyAdmin 正在使用端口 3308,而 Laravel 正在尝试通过 3306 进行连接。所以我的建议是确保您拥有正确的连接字符串! p>

                    【讨论】:

                      【解决方案14】:
                      1. 停止服务器然后运行 ​​php artisan cache:clear.
                      2. 更改 .env 文件 DB_PORT=3308(对我来说是 3308) mysql port

                      【讨论】:

                        【解决方案15】:

                        如果您使用过 Homestead,请确保以下 .env 文件中的数据库名称

                        DB_DATABASE=homestead
                        

                        与 Homestead.yaml 文件中的值相同。

                        databases:
                            - homestead
                        

                        【讨论】:

                          【解决方案16】:

                          我做了所有这些但没有工作,我发现应该停止 php artisan serve(Ctrl + C) 并重新启动 php artisan serve。

                          【讨论】:

                          • 不完全是一种想要的解决方案。但它对我有用。想知道它是如何工作的.. 疯狂
                          • 我刚刚注意到我的第二个终端也运行了php artisan serve,因此我关闭了另一个并再次运行php artisan serve
                          【解决方案17】:

                          这是我对问题中描述的问题的回应。

                          在cmd中写入:

                          php artisan cache:clear
                          

                          然后尝试在您的终端中执行此代码

                          php artisan serve
                          

                          注意: 这将重新启动服务器

                          【讨论】:

                            【解决方案18】:

                            我有这个问题好几天了,事实证明如果我在 phpMyAdmin 中创建了数据库,它不会出现在 Laravel 中, 所以,我通过 MySqlWorkbench 创建了数据库,它工作了:)

                            【讨论】:

                              【解决方案19】:

                              首先使用此命令清除缓存

                              php artisan cache:clear
                              

                              然后用这个命令重启服务器

                              php artisan serve
                              

                              【讨论】:

                              • 欢迎来到 Stack Overflow。此答案包含哪些内容未包含在包括已接受答案在内的 18 个现有答案中?在为较早的问题添加答案时,重要的是要指出这一点,并确保解释涵盖答案的工作原理和原因。
                              【解决方案20】:

                              清空你的缓存php artisan cache:clear然后重启你的服务器php artisan serve127.0.0.1:8000

                              【讨论】:

                              • 您的答案似乎与接受的答案没有什么不同。此外,这个问题是在 6 年前提出并回答的。回答时请务必查看原始问题的日期。请阅读How to Answer
                              【解决方案21】:

                              .env.example.envapp.php 中的我的 APP_NAME 变量带有空格,例如应用程序。围绕 'php artisan cache:clear 并通过 env 文件将新生成的应用程序密钥设置为 APP_KEY 变量并通过 php artisan serve 重新启动服务器解决了这个问题

                              【讨论】:

                                【解决方案22】:

                                在我的情况下,错误是由于端口号不正确(错误肯定是由于凭据不正确,即host/port/dbname/username/password)。

                                解决方案:

                                1. 右键单击 WAMP 托盘;
                                2. 在 MySQL 上单击(拖动光标);
                                3. 查看 MySQL 使用的端口号;
                                4. 在你的 Laravel 配置中添加相同的内容:
                                  • .env文件;
                                  • config/database.php.

                                清除缓存 php artisan config:cache

                                运行迁移 php artisan migrate

                                【讨论】:

                                  【解决方案23】:

                                  php artisan config:cache 
                                  

                                  在您的终端中,它将被修复

                                  【讨论】:

                                  • 之前有人建议使用config:cache 而不是cache:clear
                                  • edit 回答您的问题,包括解释它是如何工作的以及为什么它可以解决问题中描述的问题。见How to Answer
                                  • 我对这个答案的投票。也将DB_DATABASE 重命名为.envenv.example,并以现金形式使用旧的“laravel”名称。从页尾尝试了所有。最后,这通过config :cache 实现了
                                  【解决方案24】:

                                  检查您在 WAMP 中的端口(它位于 phpMyAdmin 的顶部)与 .env 文件中的 DB_port 匹配。

                                  我在.env 中的DB_port3306。我在 WAMP (phpMyAdmin) 中的服务器端口是 3308 - 你应该匹配它们。

                                  【讨论】:

                                    【解决方案25】:

                                    我有同样的问题,我看到我的数据库列出了我不存在的数据库的名称。

                                    我手动创建同名的数据库,然后运行这个对我有用的命令。

                                    1. 在 phpmyadmin 中创建数据库
                                    2. php 运行工匠

                                    【讨论】:

                                      【解决方案26】:

                                      在第四个解决方案中,这个问题得到了回答,但我更愿意再次回答以不同地解释这个问题。 我在 phpmyadmin 中创建我的数据库,即 http://localhost/phpmyadmin 并且问题已解决。这是我的代码:

                                      <?php
                                      
                                      $servername = "127.0.0.1";
                                      $username = "root";
                                      $password = "";
                                      $dbname = "myDbn2";
                                      
                                      try {
                                      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
                                      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                      
                                      echo "Database created successfully<br>";
                                      
                                      
                                      $sql = 'create table if not exists fruits (id integer  , name text , color text 
                                      , price float) ;';
                                      
                                      $conn->exec($sql);
                                      echo 'the table created successfully </br>';
                                      
                                      
                                      $sql2 = 'insert into fruits values (1 , "apple", "red" , 23.2);';
                                      $conn->exec($sql2);
                                      
                                      echo 'insert was successfully';
                                      } catch (PDOException $e) {
                                      echo $e->getMessage();
                                      }
                                      
                                      $conn = null;
                                      
                                      
                                      ?>
                                      

                                      代码创建一个数据库,然后创建一个表并在其中插入一条记录。 如果您不在 phpmyadmin 站点 中创建数据库,则会出现异常 你也不需要使用 sql 语句 CREATE DATABASE name ; 没有它也可以工作。

                                      【讨论】:

                                        【解决方案27】:

                                        php artisan config:cache 该命令修复了我的 1049 数据库未找到。

                                        【讨论】:

                                          【解决方案28】:

                                          您只需创建数据库或通过 localhost phpMyAdmin 导入您的数据,不要忘记名称应该同名

                                          【讨论】:

                                          • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                                          【解决方案29】:

                                          每个人都提到了php artisan cache:clear。有时它不起作用。 但根据我的经验,清除缓存后只需删除数据库并再次创建它。然后再次运行它

                                          php artisan migrate
                                          

                                          肯定会成功的。

                                          【讨论】:

                                            猜你喜欢
                                            • 2020-02-08
                                            • 2020-10-21
                                            • 1970-01-01
                                            • 2016-02-14
                                            • 2021-07-25
                                            • 2018-09-24
                                            • 1970-01-01
                                            • 2021-12-03
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多