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 serve
127.0.0.1:8000
【讨论】:
您的答案似乎与接受的答案没有什么不同。此外,这个问题是在 6 年前提出并回答的。回答时请务必查看原始问题的日期。请阅读How to Answer。【参考方案21】:.env.example
和 .env
和 app.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
重命名为.env
和env.example
,并以现金形式使用旧的“laravel”名称。从页尾尝试了所有。最后,这通过config :cache
实现了【参考方案24】:
检查您在 WAMP 中的端口(它位于 phpMyAdmin 的顶部)与 .env
文件中的 DB_port
匹配。
我在.env
中的DB_port
是3306
。我在 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] 找不到驱动程序