2015-04-01 129 views
18

情况是这样的,我试图使用PHP连接来连接我的MySQL数据库是phpmyadmin。只是试图查看连接是否成功,没有什么奇特的连接。我使用MAMP承载数据库,我想使用的连接是这样的:PHP连接失败:SQLSTATE [HY000] [2002]连接被拒绝

<?php 
$servername = "127.0.0.1"; 
$username = "root"; 
$password = "root"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully"; 
} 
catch(PDOException $e) 
{ 
    echo "Connection failed: " . $e->getMessage(); 
} 
?> 

我一直在使用邮递员来测试,看看是否连接正常工作,但我不断收到此错误信息:

连接失败:SQLSTATE [HY000] [2002]连接被拒绝

我收到了一条错误消息之前:

连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录

这是因为我已经将服务器名称设置为localhost,通过将其更改为IP地址,它给了我连接拒绝,并且我不知道什么是错误的。

任何有关这方面的帮助将不胜感激,谢谢。

+0

听起来好像你的MySQL服务没有在127.0.0.1 TCP上监听。如果它真的在运行,它可能是在本地套接字上,但不是TCP。 'mysql:localhost; dbname = AppDatabase'是否有所作为? – 2015-04-01 18:14:13

+0

...还是“localhost”发生的“没有这样的文件或目录”?如果是这样,php.ini中的套接字路径不正确,或者MySQL根本没有运行。 – 2015-04-01 18:15:37

回答

19

我发现为什么连接不工作的原因,这是因为连接试图连接到端口8888,当它需要连接到端口8889

$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password); 

这解决了问题,虽然将服务器名称更改为localhost仍然会导致错误。

连接失败:SQLSTATE [HY000] [2002]没有这样的文件或目录

但是,当进入服务器名称的IP地址连接成功。

+1

尝试执行一个'ping localhost'来查看是否ping回环回地址。可能是您的主机文件已损坏。在主机名上使用IP将提供小的性能提升 – DarkBee 2015-04-01 21:17:18

+2

您是如何找出正确的端口的?本地主机端口8080是不是默认的?当你使用tcp协议时会改变吗? – 2016-09-04 19:38:41

+0

我相信这与ipv6有关。我的主机localhost解析为':: 1',所以我怀疑底层的mysql客户端没有ipv6支持(即使是本地地址)。将其更改为127.0.0.1解决了它,就像答案的最后一行所示。 – 2017-08-20 17:04:58

相关问题