Frage

Mein Code funktioniert alles in Ordnung gestern und heute ist es plötzlich nur will nicht meine Datenbank verbinden. Ich habe keine Einstellungen auf ihm geändert oder auf den Code, und ich habe keine Software entweder aktualisiert. Alles, was ich tun, ist dies:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

Und ich bekomme eine schöne Ausnahme Meldung, die besagt dies:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

Die Sache ist die: Ich bin eindeutig nicht mit einer Unix-Socket zu verbinden versucht, aber unter Verwendung von TCP / IP. Was mache ich falsch? Gibt es etwas, was ich bin fehlt hier?

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Sie verwenden einen Unix-Socket. Wenn „localhost“ MySQL-Client-Bibliotheken lesen interpretieren sie nicht als TCP-Host „localhost“ und diesen Namen auflösen, aber den Standard-Socket-Standort verwenden. TCP auf dem lokalen Computer für die Verwendung müssen Sie 127.0.0.1 als Hostnamen verwenden.

Um die Vergangenheit Nutzung unix_socketinstead von host im DSN angeben. Die Lage der Buchse für localhost verwendet wird, kann bei der Kompilierung oder in einigen Versionen von PHP pdo_mysql.default_socket im php.ini definiert werden.

Andere Tipps

Von der PHP-Dokumentation über Verbindung zu MySQL mit PDO: PDO_MYSQL DNS

Die Notiz am Ende sagt:

  

Unix nur:

     

Wenn der Hostname wird auf „localhost“, dann die Verbindung zu dem   Server wird durch einen Domain-Socket gemacht. Wenn PDO_MYSQL kompiliert gegen   libmysql dann die Lage der Socket-Datei ist bei libmysql der   in Lage zusammengestellt. Wenn PDO_MYSQL gegen mysqlnd einen kompilierte   Standard-Buchse kann durch die pdo_mysql.default_socket Einstellung eingestellt werden.

Also, um dieses Problem zu beheben würden Sie richtig die Position Ihres mysql.sock in php.ini konfigurieren müssen

  1. Finden Sie Ihre mysql.sock Datei. Gemeinsame Orte:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • oder wenn Sie MAMP oder LAMP sucht in den tmp-Ordner für MySQL verwenden
  2. Bearbeiten Sie Ihre Datei php.ini und ordnungsgemäß den Wert für pdo_mysql.default_socket gesetzt

  3. Starten Sie den Apache-Server, um Pickup die Änderungen in der Datei php.ini

Unter Ubuntu können Sie diese Einstellung in der php.ini verwenden

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Habe ich nur noch die folgende Zeile:

'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',

und alles war gut.

Es gibt ein Update auf die Dokumentation für Drush die dokumentiert hier .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top