Aujourd'hui, j'ai supprimé et réinstallé la dernière version de lampp afin de passer à php 5.30, et soudain, une application très simple ne parvient pas à se connecter à la base de données mysql. J'utilise PDO pour me connecter et je reçois l'erreur suivante:
Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect
via unix://) in /home/raistlin/www/todoapp/home.php on line 9
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002]
Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0
/home/raistlin/www/todoapp/home.php(9): PDO->__construct('mysql:Host=loca...', 'USER',
'PASSWORD') #1 {main} thrown in /home/raistlin/www/todoapp/home.php on line 9
Je ne capte pas l'erreur pour le moment, pour le déboguer.
Le code suivant suffit pour reproduire le problème sur mon système:
<?php
$DBACCESS = array(
"connstring"=>"mysql:Host=localhost;dbname=todoapp",
"Host"=>"localhost",
"user"=>"user",
"password"=>"password",
"todoapp"=>"todoapp"
);
echo implode('<br \>',$DBACCESS);
$dbh = new PDO($DBACCESS['connstring'],$DBACCESS['user'],$DBACCESS['password']);
$dbh = null;
?>
En regardant en ligne, j'ai trouvé une ou deux autres personnes ayant le même problème, mais aucune n'a reçu de réponse, encore moins une réponse fonctionnelle. est-ce que quelqu'un sait ce qui se passe? Y a-t-il quelque chose que j'ai manqué dans la configuration? Que dois-je faire pour le réparer?
Cela signifie généralement que vous devez spécifier TCP/IP (1) ou indiquer à MySQL où se trouve votre socket Unix (2):
Vous pouvez également utiliser 127.0.0.1, plutôt que de spécifier "localhost", dans votre chaîne de connexion db pour éviter complètement ce problème.
Vous voudrez peut-être modifier php.ini pour que PDO puisse trouver mysql.sock en spécifiant le pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock
(dans le cas de xampp). N'oubliez pas de redémarrer Apache après avoir changé php.ini.
(Désolé, cela semble être une solution répétée).
J'utilise MAMP 2.0.1 et Symfony 1.4 avec Doctrine pour ce projet.
La troisième option a fonctionné pour moi avec une petite modification: dans /config/databases.yml
dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'
La cause la plus courante d'une erreur comme celle-ci serait que MySQL ne fonctionne pas.