2014-10-30 19 views
0

我試圖學習在PHP中使用SQL的東西,但我遇到了一個問題,只需連接到我的數據庫。無法連接到PHP中的遠程SQL數據庫,但遠程訪問已建立並確認工作

在某種程度上,數據庫幾乎肯定可以用於遠程訪問。我暫時禁用了iptables(我知道,壞壞!),所以沒有防火牆阻止訪問。我正在使用的MySQL用戶被配置爲能夠從任何IP連接。 SQL服務器正在正確監聽所有連接,並在Linux專用服務器上運行。

[[email protected] ~]# netstat -lpnut | grep mysql 
tcp  0  0 0.0.0.0:3315    0.0.0.0:*     LISTEN  3915/mysqld 

我也用完全相同的憑據成功地遠程連接到我的Java數據庫,就像這樣:

 Class.forName("com.mysql.jdbc.Driver"); 
     Connection conn = DriverManager.getConnection("jdbc:mysql://__ip__:_port_/_dbname_", "username", "password"); 
     System.out.println("Connection established."); 

這個功能就好了,我可以成功運行的查詢等。由於我現在禁用了iptables,因此只要有Java和Java SQL連接器,這個連接就可以正常工作。現在

,我試圖連接到同一數據庫在PHP中:

 $db = mysqli_connect($sql_host, $sql_user, $sql_pass, $sql_db, $sql_port); 

而這個連接失敗,出現以下錯誤:

Warning: mysqli_connect(): (HY000/2003): Can't connect to MySQL server on 'xx.xx.xx.ip' (111)

注意$ sql_user,$ sql_pass,$ sql_host等都與Java連接中使用的憑證相同,所以用戶無法從新IP訪問服務器時不會有任何問題,因爲該用戶被授予訪問權限%,我確信它是的確能夠從users表中未明確允許的多個IP訪問SQL Server。我也嘗試過不同的用戶,包括root,並且都給出了相同的連接錯誤。

我花了幾個小時環顧四周,但我真的找不到任何似乎是正確的答案,真的很感激任何幫助!

這是否可能是由我的網絡主機引起的?我已經在HostGator虛擬主機以及whois.com託管上嘗試了這個腳本,並且都給出了相同的錯誤。他們可能會阻止PHP腳本連接到遠程數據庫嗎?

回答

0

您是否嘗試過使用telnet到3315上的服務器從您的網絡主機?

+0

我使用沒有ssh訪問的共享主機。我仍然可以嘗試telnet嗎? – 2014-10-30 03:21:26

+0

只需在php中使用原始tcp套接字或者不確認3315是否打開。爲什麼這是一個奇怪的港口? – winmutt 2014-10-30 03:36:58

+0

那麼我的PHP知識是相當有限,但我認爲我正確地做了「原始TCP套接字」,並得到這個錯誤: '無法創建套接字[1]:操作不允許'。我理解這是我的共享虛擬主機的限制嗎? :(如果是這樣,這可能是SQL連接無法正常工作的原因吧? 它在端口3315上,因爲我只是決定隨心所欲地改變它 – 2014-10-30 03:45:58