2012-05-13 17 views
9

Ich habe ein PHP-Skript, das ich verwende, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Verbindung durch mysql_connect funktioniert perfekt, aber wenn sie mit PDO versucht, bekomme ich folgende Fehlermeldung:Keine Verbindung zum MySQL-Server mit PDO

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

der Code, den ich verbinden verwenden unter:

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

Vielen Dank im Voraus

+0

Der Fehler ist offensichtlich genug ... der angegebene Hostname kann nicht in eine IP-Adresse aufgelöst werden. –

+3

Wo "Hostname" steht, müssen Sie * den Hostnamen oder die IP-Adresse Ihres * mySQL-Servers eingeben. –

+1

Ich habe vergessen zu erwähnen, ich benutze IP-Adressen (und dass IP-Adresse ist auch in den Fehler), aber ich habe die Werte aus Sicherheitsgründen – user1337210

Antwort

3

Es scheint ziemlich einfach, hier ist, was ich benutze, um meine PDO-Connectors zu erstellen (bemerkt, dass Ihr DB-Name und Host anders als meine getan werden, weiß nicht, ob das relevant ist, aber eine Überprüfung wert):

PDO Creation Funktion

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 

Und während es macht keinen Sinn, wenn ich versuchte, $dsn Inline einschließlich Variablen während der newPDO zu erklären Rufen Sie an, ich bekam immer auch Fehler. Ich habe es auseinander gebrochen und dazu die Variable $ dsn benutzt. Und seither kein Problem mehr.

Fragen Sie sich, ob Sie zufällig im Shared Hosting sind?

HINWEIS: Wenn Sie nicht über eine eigene IP-Adresse haben, und stattdessen gehen durch eine NAT, wird Ihre IP nicht richtig an den tatsächlichen Server übersetzen.

Das hilft überhaupt?

UPDATE: Ich dachte nur an eine andere Sache. Versuchen Sie, eine Verbindung zu einer MySQL-Datenbank herzustellen, die sich auf einer anderen IP-Adresse befindet als Ihre Skripts? Wenn dies der Fall ist, müssen Sie wahrscheinlich remoteSQL-Zugriff für die IP-Adresse aktivieren, von der aus Sie die Datenbank aufrufen. Ziemlich einfach zu tun, aber KRITISCH, wenn Sie nicht auf localhost zugreifen.

+1

Wie aktiviert man den remoteSQL-Zugang? – patorjk

9

Bekam das gleiche Problem. Meine Lösung war ein weiterer Datenbankport. Ich habe localhost: 1234 geschrieben und diesen Fehler erhalten.

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

Sie Herr sind fantastisch und ich liebe dich – Nick

0

Sie scheinen nicht, die Datenbank-Host-dns Details oder IP-Adresse angeben:

mit behoben. Das Hinzufügen wird das Problem lösen

Verwandte Themen