Laravel PDOException SQLSTATE[HY000] [1049] 未知数据库 'forge'

Posted

技术标签:

【中文标题】Laravel PDOException SQLSTATE[HY000] [1049] 未知数据库 \'forge\'【英文标题】: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 清除缓存真的很有帮助。你很棒。你能写下你自己的答案以便接受吗? 【参考方案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】:
    首先您必须创建相关的数据库。 然后:php artisan cache:clear 现在运行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】:
    停止服务器然后运行php artisan cache:clear。 启动服务器,现在应该可以工作了

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:
    停止服务器然后运行 ​​php artisan cache:clear. 更改 .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)。

解决方案:

    右键单击 WAMP 托盘; 在 MySQL 上单击(拖动光标); 查看 MySQL 使用的端口号; 在你的 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】:

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

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

    在 phpmyadmin 中创建数据库 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

肯定会成功的。

【讨论】:

以上是关于Laravel PDOException SQLSTATE[HY000] [1049] 未知数据库 'forge'的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 PDOException 找不到驱动程序

Laravel 5 PDOException 找不到驱动程序

Laravel:错误 [PDOException]:在 PostgreSQL 中找不到驱动程序?

Laravel 到 SQL Server (sqlsrv)。 [PDOException] 找不到驱动程序

使用 XAMPP 的 Laravel 迁移错误:[PDOException] 找不到驱动程序 [重复]

Laravel 和 Postgresql 带有消息“找不到驱动程序”错误的 PDOException