Domanda

Il mio codice ha funzionato bene ieri e oggi improvvisamente non voglio collegarmi al mio database. Non ho modificato alcuna impostazione su di esso o sul codice e non ho nemmeno aggiornato alcun software. Tutto ciò che faccio è questo:

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

E ricevo un bel messaggio di eccezione che dice questo:

Avvertenza: PDO :: __ construct (): [2002] Nessun file o directory (tentando di connettersi tramite unix: ///tmp/mysql.sock) in ...

Il fatto è: chiaramente non sto provando a connettermi usando un socket unix ma usando TCP / IP. Che cosa sto facendo di sbagliato? C'è qualcosa che mi manca qui?

Grazie per l'aiuto.

È stato utile?

Soluzione

Stai usando un socket Unix. Durante la lettura di " localhost " Le librerie client MySQL non lo interpretano come host TCP "localhost" e risolvi quel nome ma usa la posizione predefinita del socket. Per usare TCP sul computer locale devi usare 127.0.0.1 come nome host.

Per specificare il passato, utilizzare unix_socket anziché host nel DSN. La posizione del socket utilizzato per localhost può essere definita in fase di compilazione o in alcune versioni di PHP utilizzando pdo_mysql.default_socket in php.ini .

Altri suggerimenti

Dalla documentazione PHP sulla connessione a MySQL tramite PDO: PDO_MYSQL DNS

La nota alla fine dice:

  

Solo Unix:

     

Quando il nome host è impostato su " localhost " ;, quindi la connessione a   il server viene creato tramite un socket di dominio. Se viene compilato PDO_MYSQL   libmysql quindi la posizione del file socket è su libmysql   compilato in posizione. Se PDO_MYSQL è compilato su mysqlnd a   il socket predefinito può essere impostato tramite l'impostazione pdo_mysql.default_socket.

Quindi per risolvere questo problema dovresti configurare correttamente in php.ini la posizione del tuo mysql.sock

  1. Trova il tuo file mysql.sock. Posizioni comuni:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • o se usi MAMP o LAMP cerca nella cartella tmp per mysql
  2. Modifica il tuo file php.ini e imposta correttamente il valore per pdo_mysql.default_socket

  3. Riavvia il server Apache per rilevare le modifiche nel file php.ini

Su Ubuntu, puoi usare questa impostazione in php.ini

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

Ho appena aggiunto questa riga:

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

e tutto andava bene.

C'è un aggiornamento ai documenti per Drush che è documentato qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top