2012-05-13 41 views
9

Mam skrypt PHP, którego używam do łączenia się z bazą danych MySQL. Połączenie przez mysql_connect działa perfekcyjnie, ale gdy próbuje z PDO pojawia się następujący błąd:Nie można połączyć się z serwerem MySQL przy użyciu PDO

SQLSTATE[HY000] [2005] Unknown MySQL server host 'hostname' (3) 

kod używać do łączenia się poniżej:

<?php 
    ini_set('display_errors', 1); 
    error_reporting(E_ALL); 

    $hostname_localhost ="hostname"; 
    $database_localhost ="dbname"; 
    $username_localhost ="user"; 
    $password_localhost ="pass"; 
    $user = $_GET['user']; 
    $pass = $_GET['pass']; 

    try{ 
     $dbh = new PDO("mysql:host=$hostname_localhost;dbname=$database_localhost",$username_localhost,$password_localhost); 
     echo 'Connected to DB'; 
     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $dbh->prepare("SELECT check_user_company(:user,:pass)"); 
     $stmt = $dbh->bindParam(':user',$user,PDO::PARAM_STR, 16); 
     $stmt = $dbh->bindParam(':pass',$pass,PDO::PARAM_STR, 32); 

     $stmt->execute(); 

     $result = $stmt->fetchAll(); 

     foreach($result as $row) 
     { 
      echo $row['company_id'].'<br />'; 
     } 

     $dbh = null; 
    } 
    catch(PDOException $e) 
    { 
     echo $e->getMessage(); 
    } 
    ?> 

góry dzięki

+0

Błąd jest wystarczająco oczywisty ... podana nazwa hosta nie może zostać przetłumaczona na adres IP. –

+3

Tam, gdzie jest napisane "nazwa hosta", musisz wpisać * swoją * nazwę hosta lub adres IP swojego serwera mySQL. –

+1

Zapomniałem wspomnieć, używam adresów IP (i ten adres IP również występuje w błędzie), ale zmieniłem wartości celowo ze względów bezpieczeństwa – user1337210

Odpowiedz

3

Wydaje całkiem proste, oto, czego używam do budowania moich złączy PDO (zauważyłem, że twoja nazwa i serwer są wykonane inaczej niż moje, nie wiem, czy to ważne, ale warte sprawdzenia):

PDO Creation funkcja

require_once('config.inc.php'); 

function buildDBConnector(){ 
    $dsn = 'mysql:dbname='.C_BASE.';host='.C_HOST; 
    $dbh = new PDO($dsn, C_USER, C_PASS); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    return $dbh; 
} 

config.inc.php

define('C_HOST','localhost');// MySQL host name (usually:localhost) 
define('C_USER','sweetUsername');// MySQL username 
define('C_PASS','sweetPassword');// MySQL password 
define('C_BASE','superGreatDatabase');// MySQL database 

I choć to nie ma sensu, kiedy starałem się zadeklarować $dsn inline tym zmiennych podczas newPDO Zadzwoń, ciągle dostaję porażki. Rozbiłem to na części i użyłem zmiennej $ dsn, aby to zrobić. I od tego czasu nie miałem problemu.

Zastanawiasz się, czy przypadkiem korzystasz z dzielonego hostingu?

UWAGA: Jeśli nie ma dedykowanego adresu IP, a zamiast tego idą przez NAT, twój IP nie będzie prawidłowo przełożyć do rzeczywistego serwera.

Ta pomoc w ogóle?

UPDATE: Podobnie myślał o innej rzeczy. Próbujesz połączyć się z bazą danych mysql, która znajduje się w innym IP niż Twoje skrypty? Jeśli tak, najprawdopodobniej konieczne będzie włączenie dostępu zdalnego dla bazy danych IP, z której wywoływana jest baza danych. Dość łatwe do wykonania, ale KRYTYCZNE, jeśli nie uzyskujesz dostępu do localhost.

+1

Jak można włączyć dostęp zdalny? – patorjk

9

Mam ten sam problem. Moim rozwiązaniem był inny port bazy danych. Napisałem localhost: 1234 i otrzymałem ten błąd.

utrwalono:

mysql:host=$hostname_localhost;port=1234;dbname=$database_localhost",$username_localhost,$password_localhost); 
     echo 'Connected to DB'; 
+1

ty jesteś fantastyczny i kocham cię – Nick

0

dont wydają się określić przyjmującego w bazie dane DNS lub adres IP. Dodanie tego rozwiąże problem.

Powiązane problemy