Fehler bei einer MySQL-Verbindung mit PHP / PDO
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.
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_socket
instead 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
-
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
-
Bearbeiten Sie Ihre Datei php.ini und ordnungsgemäß den Wert für pdo_mysql.default_socket gesetzt
-
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 .