2013-07-03 80 views
0

我想通過這個腳本連接到外部數據庫:PDO拒絕訪問到外部主機,但我可以訪問phpMyAdmin CP

$dsn = 'mysql:host=xxx.xxx.xxx.xxx;dbname=dbname'; 
$user = 'user'; 
$password = 'pass'; 
try { 
    $pdo = new PDO($dsn, $user, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
    die(); 
} 

關於數據(主機,用戶名,數據庫和密碼)一切都是正確的,因爲當我在瀏覽器上提示xxx.xxx.xxx.xxx/phpmyadmin並輸入用戶名和密碼時,讓我進入具有創建,刪除等權限的數據庫。 但是,當我嘗試連接通過PDO它給我的「連接失敗:SQLSTATE [28000] [1045]接取拒絕......」

phpMyAdmin的面板上顯示的信息如下: 的MySQL服務器 :本地主機通過UNIX套接字 服務器版本:5.5.20 協議版本:10 用戶:用戶@本地 MySQL的字符集:UTF-8的Unicode(UTF-8)

Web服務器Apache的 MySQL的 客戶端版本:5.5.20 PHP的擴展:mysqli

由於該「PHP擴展:mysqli」屬性,我可能被迫使用mysqli嗎? 在此先感謝!

+2

顯示在PHPMYADMIN面板上的信息如下:MySQL服務器:** Localhost **介意你 –

回答

0

除了setAttribute方法設置錯誤輸出以提出警告,但您處於try/catch塊中,因此您可能需要考慮使用PDO::ERRMODE_EXCEPTION

其次,檢查您的用戶名/密碼的遠程權限。該用戶帳戶可能存在IP限制。您可以在用戶帳戶上使用通配符%作爲HOST,或者(建議)提供連接到數據庫的服務器IP。

+0

非常感謝你的幫助。不幸的是,我不能自己這樣做,所以直到管理員與我聯繫,我不能告訴你它是否按預期行事。 – user2548036

0

我想冒險猜測,phpmyadmin工作正常,因爲phpmyadmin是你正在嘗試連接的主機。我的猜測是服務器或用戶帳戶被配置爲只能通過127.0.0.1/localhost進行訪問 - 您可以爲嘗試連接的用戶創建另一個記錄,併爲該用戶提供通配符或特定主機。根據你在這裏提供的信息,似乎你只需要設置MySQL來接受來自其他主機的連接。

+0

非常感謝!一旦該服務器的管理員告訴我,如果這樣做已經完成,我會告訴你這是否已經奏效! – user2548036

-1

與此同時,我試圖在本地運行應用程序,但它似乎無法連接,因此在識別上述問題時可能會有所幫助。 這個時間(本地主機),錯誤的是: 連接失敗:SQLSTATE [HY000] [1045]訪問被拒絕的用戶 'xxxxxxx_xxxxxxx' @ 'localhost' 的(使用密碼:YES)

我創建的用戶在我自己的phpmyadmin授予他對這個數據庫的所有權限,所以我不明白爲什麼即使在本地主機我無法連接到它。它可能與上述問題有關,或者是完全不同的,應該有不同的主題?謝謝!