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.
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_socket
au 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
.
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
Trouvez votre fichier mysql.sock. Emplacements communs:
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
Sur 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 y a une mise à jour des documents pour Drush qui est documentée ici .