web-dev-qa-db-fra.com

Erreur lors de la création de la connexion à PDO dans PHP

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?

25
krdluzni

Cela signifie généralement que vous devez spécifier TCP/IP (1) ou indiquer à MySQL où se trouve votre socket Unix (2):

  1. "mysql: Host = 127.0.0.1" ou "mysql: Host = localhost; port = 3306"
  2. "mysql: unix_socket =/var/run/mysqld/mysqld.sock"
51
TML

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.

24
jefftulsa

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).

9
reeserc

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;'
4
tacheshun

La cause la plus courante d'une erreur comme celle-ci serait que MySQL ne fonctionne pas.

2
pilsetnieks