我正在Laravel 5中构建一个Web应用程序。该应用程序应该将“类别名称”存储在MySQL数据库中并显示一个表单以添加新的“类别名称”。当我执行命令php artisan serve
并导航到http://localhost:8000/admin/categories/时,我收到以下错误消息:
PDOException in Connector.php line 50:
SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it.
根据我读到的关于堆栈溢出的几篇帖子,许多用户遇到此错误时没有正确配置.env文件,该文件覆盖了PHP数据对象(PDO)的默认设置,如database.php文件中所指定。 .env文件定义如下:
DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
并且database.php文件中的mysql密钥如下:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'homestead'),
'username' => env('DB_USERNAME', 'homestead'),
'password' => env('DB_PASSWORD', 'secret'),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
奇怪的是,当我进入我的虚拟机并运行mysql -uhomestead -psecret homestead
时,我能够连接到数据库。问题是,当我可以使用相同的参数直接连接到它时,为什么Laravel无法连接到MySQL?还有什么可以拒绝进入Laravel?
我将homestead.yaml中指定的ip地址从localhost更改为192.168.10.10。然后我跑了homestead provision
,这似乎解决了这个问题。主机无法解析localhost或127.0.0.1,因为它已映射到自身。
有时可能是缓存问题:
php artisan config:clear
我在SQLite数据库中遇到了这个错误。与其他环境(如果不存在可能会创建数据库文件)不同,在Laravel中,我不得不手动创建数据库文件。我在运行服务器后创建了它;这导致我犯这个错误。重新启动服务器后就可以了。
检查您的XAMPP(如果您正在使用)。我一遍又一遍地得到同样的错误,直到我意识到我的xampp没有启用或离线,所以我启用了我的xampp,然后它终于工作了。
在我自己的情况下,我遇到了同样的问题
run php artisan serve
我和Wampserver有同样的问题。它对我有用:
您必须更改此文件:“C:\ wamp \ bin \ mysql [mysql_version] \ my.ini”例如:“C:\ wamp \ bin \ mysql [mysql5.6.12] \ my.ini”
并将默认端口3306更改为80.(第20和27行,两者中)port = 3306 to port = 80
我希望这是有帮助的。
然后只需转到“控制”面板,启动Apache和MySQL服务。
当我可以使用相同的参数直接连接到Laravel时,为什么Laravel无法连接到MySQL?
来吧,env('DB_HOST', 'localhost')
与NULL
不一样,env('DB_USERNAME', 'homestead')
与homestead
无处相同
你不能称之为“相同”这样不同的事情,如明确提供的文字,缺席参数或某些功能的结果!这是三个不同的事情!
只有在两种情况下都提供字面上相同的参数时,您才能说“相同”:
mysql -hlocalhost -uhomestead -psecret homestead
对于shell,和
'mysql' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'homestead',
'username' => 'homestead',
'password' => 'secret',
对于Laravel。
原因可能是:
如果您尝试从不同的服务器访问数据库,那么大多数conman面临的问题是数据库访问仅限于localhost / 127.0.0.1
解决方案:您可以修改my.cnf
(在Ubuntu上再次位于/etc/mysql/my.cnf)
并更改以下内容:
bind-address = 0.0.0.0
要么
bind-address = SERVER_PUBLIC_IP_ADDRESS
我建议创建一个db用户而不是root用户并删除root用户,因为从root用户的任何IP提供数据库访问是不安全的。
如果您尝试从同一服务器连接数据库:
解决方案:只需使用TCP / IP而不是Unix套接字。您可以在连接时使用127.0.0.1而不是localhost来执行此操作。但是,Unix套接字可能更快,更安全。
更改后,您已重新启动mysql服务
sudo service mysql restart
我变了
DB_HOST =本地主机
至
DB_HOST =本地主机:3307
在.env文件中
我遇到了同样的问题,并在互联网上阅读了所有的答案,但没有一个帮助!终于找到了答案,我希望这个解决方案有助于某人。
我只是将我的DB_PORT设置为33060
并解决了问题。
在Windows中,只需关闭用户访问权限(UAC).-打开运行类型的msconfing并按Enter键进入工具并查找.UAC -set永远不会通知-restart PC,它会
记得在提示时允许它通过防火墙。
在我的情况下,我已经在DB_HOST
的.env文件中写入了像Homestead(192.168.10.10)默认的VM的地址。但它只适用于artisan migrate
。但是,使用应用程序“远程”连接此数据库需要使用127.0.0.1的IP。
希望它能帮助别人。
我有同样的问题,但在我自己的情况下,我在本地服务器上运行。我后来发现错误:
"PDOException with a message 'SQLSTATE[HY000] [2002]
没有联系,因为目标机器主动拒绝它。“
是因为我没有启动Apache and MySQL in Xampp
控制面板,因此应用程序无法获取所需的结果,因为没有连接。
我马上在Xampp控制面板Apache and MySQL
开始了两个the error was fixed
。希望这对你有用