2012-05-13 5 views
9

Ho uno script PHP che uso per connettersi a un database MySQL. Collegamento tramite mysql_connect funziona perfettamente, ma quando si cerca con DOP ottengo il seguente errore:Non è possibile connettersi al server MySQL tramite PDO

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

il codice che uso per collegare è inferiore:

<?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(); 
    } 
    ?> 

Grazie in anticipo

+0

L'errore è abbastanza ovvio ... il nome host specificato non può essere risolto in un indirizzo IP. –

+3

Dove si dice "hostname" si suppone di inserire * il proprio nome host o indirizzo IP del server * mySQL. –

+1

Ho dimenticato di menzionare, sto usando gli indirizzi IP (e anche l'indirizzo IP è nell'errore) ma ho modificato i valori di proposito per motivi di sicurezza – user1337210

risposta

3

Sembra abbastanza semplice, ecco quello che uso per costruire i miei connettori PDO (ho notato che il tuo nome e l'host sono fatti in modo diverso dal mio, non so se è pertinente, ma vale un controllo):

Creazione DOP funzione

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 

E mentre non ha senso, quando provai dichiarare $dsn linea compreso variabili durante la newPDO chiamata, ho continuato a ricevere anche i fallimenti. L'ho spezzato e ho usato la variabile $ dsn per farlo. E non ho avuto un problema da allora.

Ti chiedi se sei in hosting condiviso per caso?

NOTA: Se non si dispone di un IP dedicato, e invece stanno attraversando un NAT, il tuo IP verrà non correttamente tradurre al server vero e proprio.

Che aiuto?

UPDATE: solo pensato di un'altra cosa. Stai provando a connetterti a un database mysql su un IP diverso da quello in cui stai eseguendo i tuoi script? In tal caso, sarà probabilmente necessario abilitare l'accesso remoto SQL per l'IP da cui si chiama il database. Abbastanza facile da fare, ma CRITICO se non si accede a localhost.

+1

Come si abilita l'accesso remoteSQL? – patorjk

9

Ha avuto lo stesso problema. La mia soluzione era un'altra porta del database. Ho scritto localhost: 1234 e ho ricevuto questo errore.

fissa con:

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

signore, sei fantastico e ti amo – Nick

0

Tu non sembrano indicare l'host del database dettagli DNS o indirizzo IP. Aggiungendo che risolverà il problema