2012-01-20 73 views
12

當試圖連接到我的數據庫服務器,我遇到未知的主機的問題:未知MySQL服務器主機

Warning: mysqli::mysqli() [mysqli.mysqli]: (HY000/2005): Unknown MySQL server host 'xxxxxxxxxxxxx:port' in index.php on line 18 

行18是行,其中我試圖請求連接MySQL服務器:

$this->db = new mysqli($db_host, $db_user, $db_psw, $db_name); 

我主機上的網站託管公司我的數據庫。

+1

驗證$ db_host,$ dbuser和其他變量的值。 – adatapost

+1

作爲主機你傳遞了什麼 –

+0

它接受你的$ db_host等變量被初始化爲它們的默認值,在配置文件中的某處。 – Salaros

回答

20

通常情況下,名稱解析在主機上不起作用。如果您的連接目標始終相同,則可能需要使用其IP地址進行連接。

+0

我會檢查,讓你知道:))) – Malloc

+0

真棒的人,你救了我的一天 –

+0

哇,像這樣簡單,可以解決問題。謝謝!! – coolcool1994

7

如果您使用此代碼:

$Mysqli= new mysqli('mysql2.servidoreswindows.net:3306', 
        'usu', 'pass', 'dbname'); 

,你可以嘗試寫主機沒有端口

即:

$Mysqli= new mysqli('mysql2.servidoreswindows.net', 'usu', 'pass', 'dbname'); 
+0

我使用的Zend Db工廠和陣列('主機'=>「主機:端口」)從來沒有工作,但陣列('主機'=>「主機」,「端口」=>「端口」)工作很好,因爲http ://php.net/manual/en/mysqli.construct.php要求將端口作爲單獨的參數。 – user3338098

2

我知道這是一個老問題。但今天我遇到了同樣的問題,我發現的答案都不是正確的。

在我的情況下,問題最終導致端口3306未在我們的防火牆上打開,並且我試圖從外部服務器連接到內部mysql數據庫。

我不知道爲什麼它給你的錯誤是這種情況下的「未知主機」。我會期待更多的東西,比如「無法連接」。或「連接被拒絕」,但使用來自內部服務器的完全相同的代碼工作正常,這導致我得出這個結論。

+0

從mysql客戶端連接,如果有連接問題,會報告未知地址異常。 – samuel

5

請AWS安全組注意:

在我的情況,我可以從我的電腦扔的Telnet連接到RDS和 我可以連接擲MySQL工作臺還,但我不能從 我的EC2實例連接的是與RDS在同一個VPC內。

解決方案是:
1.我爲RDS創建了一個安全組(例如1)並分配給它。
2.我爲EC2創建了一個安全組(例如2)並分配給它。
我也已將RDS安全組(例如,1)分配給EC2。 < <這節省了我。

信息:如果您的EC2已分配了2個或更多安全組,則在RDS安全組中入站源必須創建規則,因爲許多安全組都已分配了EC2。

亞馬遜的文檔說:
在VPC 股份EC2實例與數據庫實例相同 VPC安全組。 http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html

我花了整天搜索文檔。
我希望這對你有所幫助。

0

確保你沒有包含「http://」部分。我在我的.env文件中使用了http://example.com。當我把它作爲example.com它工作。

相關問題