Lorsque vous utilisez uniquement "localhost", la bibliothèque cliente MySQL essaie d'utiliser un socket de domaine Unix pour la connexion au lieu d'une connexion TCP/IP. L'erreur vous indique que le socket, appelé MySQL
, ne peut pas être utilisé pour établir la connexion, probablement parce qu'il n'existe pas (erreur numéro 2).
Depuis la Documentation MySQL :
Sous Unix, les programmes MySQL traitent spécialement le nom d'hôte localhost, ce qui est probablement différent de ce que vous attendez par rapport aux autres programmes basés sur le réseau. Pour les connexions à l'hôte local, les programmes MySQL tentent de se connecter au serveur local en utilisant un fichier de socket Unix. Cela se produit même si une option --port ou -P est donnée pour spécifier un numéro de port. Pour vous assurer que le client établit une connexion TCP/IP au serveur local, utilisez --host ou -h pour spécifier une valeur de nom d'hôte de 127.0.0.1, ou l'adresse IP ou le nom du serveur local. Vous pouvez également spécifier explicitement le protocole de connexion, même pour localhost, en utilisant l'option --protocol=TCP.
Il existe plusieurs façons de résoudre ce problème.
- Vous pouvez simplement utiliser TCP/IP au lieu du socket Unix. Vous feriez cela en utilisant
127.0.0.1
au lieu delocalhost
lorsque vous vous connectez. Cependant, le socket Unix pourrait être plus rapide et plus sûr à utiliser. - Vous pouvez changer le socket dans
php.ini
:ouvrez le fichier de configuration MySQLmy.cnf
pour trouver où MySQL crée le socket et définissez lemysqli.default_socket
de PHP à ce chemin. Sur mon système, c'est/var/run/mysqld/mysqld.sock
. -
Configurez le socket directement dans le script PHP lors de l'ouverture de la connexion. Par exemple :
$db = new MySQLi('localhost', 'kamil', '***', '', 0, '/var/run/mysqld/mysqld.sock')