2016-01-18 62 views
0

編碼我的網站時出現問題。我已經研究了很多,但我真的不知道該怎麼做。其他服務器上的數據庫(MySQL)

function getDB() { 
$dbHost = 'otherserver'; 
$db  = 'database'; 
$dbUser = 'user'; 
$dbPass = 'blibla'; 

$db = new PDO("mysql:host=$dbHost;dbname=$db;charset=utf8mb4", $dbUser, $dbPass); 
return $db; } 

我不爲什麼,但如果我嘗試它與本地主機它的作品。如果我更改我的($ dbHost ='123.123.123')MySQL服務器它劑量。爲什麼?我真的不知道。請幫幫我。

+2

的服務器設置爲允許遠程主機連接?在默認情況下,大多數不是 –

+0

我會非常小心地允許從萬維網直接訪問您的數據庫,數據庫是非常多汁的目標,這取決於您可能想要使用數據庫web api而不是直接連接的設置。 – Sephedo

回答

1

您需要創建一個新的MySQL用戶,並授予權限,以允許遠程連接到數據庫。

事情是這樣的:

CREATE USER 'user'@'otherserver' IDENTIFIED BY PASSWORD 'blibla'; 
GRANT ALL ON *.* TO 'user'@'otherserver'; 
+0

非常感謝您盡我所能,但我仍然無法訪問我的數據庫。任何想法? – ideasia

+0

請解釋一下你的情況。你不能從你的腳本獲得訪問數據庫,對吧?數據庫是否位於另一臺服務器上,而不是腳本嘗試連接到它? – Slam

+0

是的,這是正確的,我可以用我的用戶名,密碼和主機名在phpmyadmin上訪問,但如果我嘗試運行我的腳本,它只能工作,如果我選擇本地主機。我不知道爲什麼。 – ideasia

1

在安裝的MySQL,你應該配置遠程訪問機器。在位於/etc/my.ini的Linux系統配置文件中。

打開它,發現部分[mysqld]。 確保線skip-networking被註釋掉(或刪除線),並添加以下行:

bind-address = <HERE_YOUR_IP> 

重新啓動MySQL服務器:/etc/init.d/mysql restart

當然授予訪問遠程IP地址和。

GRANT ALL ON user.* TO [email protected]'<HERE_YOUR_IP>' IDENTIFIED BY 'blibla'; 

更多詳細資料看here

+0

我嘗試過,但仍然無法工作,我等待RiggsFolly,直到他回答我的問題。還是謝謝你! – ideasia

1

如果你添加一些錯誤檢查你的代碼,它很可能你會得到一些信息,幫助您診斷這個問題,或者至少得到一個錯誤信息,這將有助於有人在這裏瞭解到底什麼是錯的。

因此改變你這樣的代碼,它應該爲你生成一個可用的錯誤消息,當連接是一個問題

function getDB() 
{ 
    $dbHost = 'otherserver'; 
    $dbname = 'database'; 
    $dbUser = 'user'; 
    $dbPass = 'blibla'; 

    try { 
     $db = new PDO("mysql:host=$dbHost;dbname=$dbname", $dbUser , $dbPass); 

     /*** set the PDO error mode to exception ***/ 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8mb4'"); 

    } catch (PDOException $e) { 
     echo 'Connection failed: ' . $e->getMessage(); 
     exit; 
    } 
    return $db; 
} 

$con = getDB(); 

foreach ($con->query('SHOW TABLES') as $row) { 
    print_r($row); 
} 
+0

我加入,但現在我得到一個新的錯誤解析錯誤:在/test/test/webs/test/php/test.php語法錯誤,意外「抓」(T_CATCH)上線26 MB的東西在你的代碼錯了嗎? – ideasia

+0

什麼是你的代碼 – RiggsFolly

+0

}趕上(PDOException $ e)項26 { – ideasia

相關問題