2015-04-01 18 views
18

Die Situation ist dies, ich versuche, eine PHP-Verbindung zu verwenden, um meine MySQL-Datenbank zu verbinden, die auf phpmyadmin ist. Nichts Besonderes über die Verbindung, nur um zu sehen, ob die Verbindung erfolgreich ist oder nicht. Ich verwende MAMP die Datenbank zu hosten, die Verbindung I zu verwenden, ich versuche, ist dies:PHP Verbindung fehlgeschlagen: SQLSTATE [HY000] [2002] Verbindung abgelehnt

<?php 
$servername = "127.0.0.1"; 
$username = "root"; 
$password = "root"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=AppDatabase", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully"; 
} 
catch(PDOException $e) 
{ 
    echo "Connection failed: " . $e->getMessage(); 
} 
?> 

Ich habe Postbote worden, um zu sehen zu testen, ob die Verbindung funktioniert, aber ich erhalte erhalten diese Fehlermeldung:

Verbindung fehlgeschlagen: SQLSTATE [HY000] [2002] Verbindung

verweigert

Bevor ich eine Fehlermeldung wurde empfangen:

Verbindung fehlgeschlagen: SQLSTATE [HY000] [2002] eine solche Datei oder das Verzeichnis

Das lag daran, dass ich den Servernamen auf localhost gesetzt hatte, indem ich dies auf die IP-Adresse änderte, die mir die Verbindung verweigert hatte, und ich habe keine Ahnung, was falsch ist.

Jede Hilfe in diesem Zusammenhang wäre dankbar, Danke.

+0

Es hört sich an, als ob Ihr MySQL-Dienst 127.0.0.1 TCP nicht abhört. Wenn es tatsächlich überhaupt ausgeführt wird, kann es sein, dass es sich um einen lokalen Socket aber nicht um TCP handelt. Macht mysql: localhost; dbname = AppDatabase einen Unterschied? –

+0

... oder war die "keine solche Datei oder Verzeichnis" mit "localhost" passiert? Wenn dies der Fall war, war entweder der Socket-Pfad in der php.ini falsch oder MySQL läuft überhaupt nicht. –

Antwort

19

ich den Grund gefunden, warum die Verbindung nicht funktioniert, war es, weil die Verbindung zum Port 8888 verbinden versucht, wenn es um Port 8889.

$conn = new PDO("mysql:host=$servername;port=8889;dbname=AppDatabase", $username, $password); 

Dies das Problem behoben zu verbinden benötigt, obwohl Wenn Sie den Servernamen in localhost ändern, wird weiterhin der Fehler angezeigt.

Verbindung fehlgeschlagen: SQLSTATE [HY000] [2002] Eine solche Datei oder das Verzeichnis

Aber es verbindet erfolgreich, wenn die IP-Adresse für den Servernamen eingegeben wird.

+1

Versuchen Sie, einen 'ping localhost' zu machen, um zu sehen, ob er mit der Loopback-Adresse pingt. Könnte sein, dass Ihre Hosts-Dateien beschädigt sind. Die Verwendung der IP über den Hostnamen wird sowieso einen kleinen Leistungsschub liefern. – DarkBee

+2

Wie haben Sie den richtigen Port gefunden? Ist nicht standardmäßig der lokale Host-Port 8080? Ändert sich das, wenn Sie das TCP-Protokoll verwenden? –

+0

Ich glaube, das hat etwas mit ipv6 zu tun. Der Host localhost für mich löst auf ":: 1" auf, also vermute ich, dass der zugrunde liegende mysql-Client keine IPv6-Unterstützung hat (selbst für lokale Adressen). Wenn ich es auf 127.0.0.1 änderte, löste es sich für mich, wie die letzte Zeile der Antwort vermuten lässt. –

Verwandte Themen