Når du kun bruger "localhost" forsøger MySQL-klientbiblioteket at bruge en Unix-domæne-socket til forbindelsen i stedet for en TCP/IP-forbindelse. Fejlen fortæller dig, at socket, kaldet MySQL
, kan ikke bruges til at oprette forbindelsen, sandsynligvis fordi den ikke eksisterer (fejl nummer 2).
Fra MySQL-dokumentationen :
På Unix behandler MySQL-programmer værtsnavnet localhost specielt, som sandsynligvis er anderledes end hvad du forventer sammenlignet med andre netværksbaserede programmer. For forbindelser til localhost, forsøgte MySQL-programmet at oprette forbindelse til den lokale server ved at bruge en Unix-socket-fil. Dette sker, selvom der gives en --port eller -P mulighed for at angive et portnummer. For at sikre, at klienten laver en TCP/IP-forbindelse til den lokale server, skal du bruge --host eller -h til at angive en værtsnavnværdi på 127.0.0.1 eller IP-adressen eller navnet på den lokale server. Du kan også specificere forbindelsesprotokollen eksplicit, selv for localhost, ved at bruge --protocol=TCP-indstillingen.
Der er et par måder at løse dette problem på.
- Du kan bare bruge TCP/IP i stedet for Unix-socket. Du ville gøre dette ved at bruge
127.0.0.1
i stedet forlocalhost
når du forbinder. Unix-stikket kan dog være hurtigere og sikrere at bruge. - Du kan ændre socket i
php.ini
:Åbn MySQL-konfigurationsfilenmy.cnf
for at finde ud af, hvor MySQL opretter socket, og indstil PHP'smysqli.default_socket
til den vej. På mit system er det/var/run/mysqld/mysqld.sock
. -
Konfigurer socket direkte i PHP-scriptet, når du åbner forbindelsen. For eksempel:
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')