web-dev-qa-db-fra.com

Avertissement: PDO :: __ construct (): [2002] Aucun fichier ou répertoire de ce type (essayant de se connecter via unix: ///tmp/mysql.sock) dans

Mon code fonctionnait très bien hier et aujourd'hui, il ne veut tout simplement plus se connecter à ma base de données. Je n'ai modifié aucun paramètre sur celui-ci ou sur le code et je n'ai mis à jour aucun logiciel non plus. Tout ce que je fais c'est ceci:

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

Et je reçois un message d'exception de Nice disant ceci:

Avertissement: PDO :: __ construct (): [2002] Aucun fichier ou répertoire de ce type (essayant de se connecter via unix: ///tmp/mysql.sock) dans ...

Le truc, c'est que je n'essaye clairement pas de me connecter en utilisant un socket Unix mais en utilisant TCP/IP. Qu'est-ce que je fais mal? Y a-t-il quelque chose qui me manque ici?

Merci pour toute aide.

34
user221314

Vous utilisez un socket Unix. Lors de la lecture des bibliothèques client MySQL "localhost", ne l'interprétez pas comme TCP Host "localhost" et résolvez ce nom, mais utilisez l'emplacement Socket par défaut. Pour utiliser TCP = sur la machine locale, vous devez utiliser 127.0.0.1 comme nom d'hôte.

Pour spécifier l'utilisation passée unix_socketau lieu de Host dans le DSN. L'emplacement du socket utilisé pour localhost peut être défini au moment de la compilation ou dans certaines versions de PHP utilisant pdo_mysql.default_socket dans le php.ini.

88
johannes

De la documentation PHP sur la connexion à MySQL en utilisant PDO: PDO_MYSQL DNS

La note à la fin dit:

Unix uniquement:

Lorsque le nom d'hôte est défini sur "localhost", la connexion au serveur est établie via une socket de domaine. Si PDO_MYSQL est compilé avec libmysql, alors l'emplacement du fichier socket est à l'emplacement compilé dans libmysql. Si PDO_MYSQL est compilé avec mysqlnd, un socket par défaut peut être défini via le paramètre pdo_mysql.default_socket.

Donc, pour résoudre ce problème, vous devez configurer correctement dans php.ini l'emplacement de votre mysql.sock

  1. Trouvez votre fichier mysql.sock. Emplacements communs:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • ou si vous utilisez MAMP ou LAMP cherchez dans le dossier tmp pour mysql
  2. Modifiez votre fichier php.ini et définissez correctement la valeur de pdo_mysql.default_socket

  3. Redémarrez votre serveur Apache pour récupérer les modifications dans le fichier php.ini

9
Ilie Pandia

Sur Ubuntu, vous pouvez utiliser ce paramètre dans php.ini

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

Je viens d'ajouter cette ligne:

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

et tout allait bien.

1
dean cameron

Il y a une mise à jour des documents pour Drush qui est documentée ici .

0
Mike Gifford