Question

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

nouveau PDO ('mysql: hôte = localhost; port = 3306; nombase = test', 'nomutilisateur', 'mot de passe');

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

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

Le problème, c’est que j’essaie clairement de ne pas me connecter à l’aide d’un socket Unix, mais bien de TCP / IP. Qu'est-ce que je fais mal? Y a-t-il quelque chose qui me manque ici?

Merci pour toute aide.

Était-ce utile?

La solution

Vous utilisez un socket Unix. Lors de la lecture de & local; localhost " Les bibliothèques clientes MySQL ne l’interprètent pas comme un hôte TCP " localhost " et résolvez ce nom mais utilisez l'emplacement de 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 le passé, utilisez unix_socket au lieu de hôte dans le DSN. L'emplacement du socket utilisé pour localhost peut être défini lors de la compilation ou dans certaines versions de PHP à l'aide de pdo_mysql.default_socket dans le php.ini . .

Autres conseils

Dans la documentation PHP sur la connexion à MySQL via PDO: DNS PDO_MYSQL

La note à la toute fin dit:

  

Unix uniquement:

     

Lorsque le nom d'hôte est défini sur "localhost", la connexion au serveur   le serveur est fait par un socket de domaine. Si PDO_MYSQL est compilé avec   libmysql alors l'emplacement du fichier de socket est chez libmysql   compilé à l'emplacement. Si PDO_MYSQL est compilé avec mysqlnd, alors   Le 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

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

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

Je viens d'ajouter cette ligne:

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

et tout allait bien.

Il existe une mise à jour de la documentation pour Drush qui est documentée ici .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top