2015-04-01 332 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

相關問題