2012-12-30 41 views
0

我試圖做一些測試,我使用甲基苯丙胺,並試圖連接到我的SQL數據庫我的服務器上。我之前沒有使用PDO,並且很難追查哪些錯誤代碼意味着什麼。我得到這個:PDO從本地主機連接到Web SQL?

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'hostname' (60) 

我的連接功能:

function getConnection() { 
    $dbhost="hostname"; 
    $dbuser="user"; 
    $dbpass="password"; 
    $dbname="somedb"; 
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    return $dbh; 
    } 

這裏我試圖執行查詢:

function getTypes() { 
    $sql = "SELECT id, name FROM type"; 
    try { 
     $db = getConnection(); 
     $stmt = $db->query($sql); 
     $types = $stmt->fetchAll(PDO::FETCH_OBJ); 
     $db = null; 
     echo '{"wine": ' . json_encode($types) . '}'; 
    } catch(PDOException $e) { 
     echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    } 
    echo 'getTypes'; 
    } 

編輯:我可以使用相同的憑據連接與mysqli。

+0

你能表明,_mysqli_工作的代碼? –

回答

1

這是一個安全問題。爲了避免數據庫被洪水氾濫或充滿垃圾,配置設置爲「只有本地IP才能訪問數據庫」。所有的共享主機都這樣做,如果你有專用的服務器,這是一個很好的做法。

在Linux /var/mysql/my.conf你有類似的東西:

skip-external-locking 
# Instead of skip-networking the default is now to listen only on 
# localhost which is more compatible and is not less secure. 
bind-address   = 127.0.0.1 
+0

所以基本上,因爲我試圖從本地訪問它,而不是它與它關聯的服務器鎖定我了嗎?這是有道理的,我可以重新創建數據庫在本地主機 –

+0

你可以,這是非常合乎邏輯的。在你正在開發的本地主機上,你正在進行在線生產。如果一個開發錯誤在你的數據庫中帶來垃圾,你將會非常不高興。 – artragis

+0

是的,這是有道理的,我只是測試檢索數據,所以我只是要跳過這一步,但我會繼續做反正 –

1

你的MySQL服務器是聽本地Unix套接字或綁定到本地主機127.0.0.1)。確保mysql服務器正在偵聽hostname的外部IP地址。注意:連接用戶(user此處)必須從客戶端IP(somedb)上訪問(GRANT);

0

你連接到正確的端口?

$dbh = new PDO("mysql:host=$dbhost;port=PORT;dbname=$dbname", $dbuser, $dbpass); 
+0

我將如何檢查使用哪個端口?我從來沒有必要用mysqli輸入一個。它會在我的設置godaddy某處? –

+0

您正在使用godaddy共享主機?我認爲然後mysql服務器正在本地unix套接字中偵聽。看到我的答案。你需要與godaddy支持交談。 –

0

如果正在運行PHP腳本的服務器是運行SQL Server的服務器,你需要不使用hostname一個連接,你需要參考本地系統。你必須在你的配置是什麼,hostname不能解決一個有效的SQLServer,在那裏如果引用localhost,它會引用運行服務器本身,並連接它需要怎樣的IP。您可以使用以下方法之一:

localhost || 127.0.0.1