Erreur lors de la connexion à MySQL avec PHP / PDO
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.
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
-
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
-
Modifiez votre fichier php.ini et définissez correctement la valeur de pdo_mysql.default_socket
-
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 .