69 votes

Démarrer avec Zend Tutorial - Zend_DB_Adapter throws Exception : "SQLSTATE[HY000] [2002] Aucun fichier ou répertoire de ce type".

J'ai commencé à apprendre Zend Framework avec le livre "Zend Framework in Action" en allemand.

Juste là où ça commence à devenir intéressant, mon test unitaire PHP jette cette erreur : "Zend_Db_Adapter_Exception : SQLSTATE[HY000] [2002] No such file or directory"

Je n'ai pas trouvé d'indices en faisant des recherches sur Google. J'ai tout fait comme indiqué dans le manuel. Quelqu'un peut-il me donner un indice sur l'endroit où chercher la faute ?

Est-ce une erreur courante de débutant ?

68 votes

Utiliser l'adresse IP pour l'hôte MySQL

3 votes

@Nguyen tu es da man ! tu as aidé plus que le mec avec 183k lol

8 votes

@Nguyen - merci, cela a réglé le problème pour moi aussi (en changeant 'localhost' par 127.0.0.1). C'était dans PDO sous Laravel, donc ce n'est pas spécifique à Zend Framework.

74voto

Pascal MARTIN Points 195780

Je dirais que vous avez un problème de connexion de PHP à MySQL...

Quelque chose comme PHP essayant de trouver un fichier socket, et ne le trouvant pas, peut-être ?
(J'ai eu ce problème à plusieurs reprises - je ne suis pas sûr que l'erreur que j'ai obtenue était exactement celle-là).

Si vous utilisez un système basé sur Linux, il devrait y avoir un fichier my.cnf quelque part, qui est utilisé pour configurer MySQL -- sur mon Ubuntu, il se trouve dans /etc/mysql/ .

Dans ce fichier, il pourrait y avoir quelque chose comme ceci :

socket = /var/run/mysqld/mysqld.sock

PHP doit utiliser le même fichier -- et, selon votre distribution, le fichier par défaut peut ne pas être le même que celui utilisé par MySQL.

Dans ce cas, en ajoutant ces lignes à votre php.ini pourrait vous aider :

mysql.default_socket = /var/run/mysqld/mysqld.sock
mysqli.default_socket = /var/run/mysqld/mysqld.sock
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

(Vous devrez redémarrer Apache pour que la modification de la page php.ini est prise en compte)

La dernière devrait être suffisante pour PDO, qui est utilisé par Zend Framework -- mais les deux précédentes ne feront aucun mal, et peuvent être utiles pour d'autres applications.

Si cela ne vous aide pas : pouvez-vous vous connecter à votre base de données en utilisant PDO, dans un autre script, qui est totalement indépendant de Zend Framework ?

Par exemple, est-ce que quelque chose comme ceci fonctionne (citation) :

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

Si ce n'est pas le cas, le problème ne vient pas de ZF, mais de la configuration ou de l'installation de PHP.

Si oui... Alors, cela signifie que vous avez un problème avec ZF, et vous devrez nous donner plus d'informations sur votre installation. (comme votre DSN, par exemple ? ).

6 votes

YEAH ! Merci beaucoup ! !! Sans cet indice, je serais resté assis ici pendant des heures... Merci pour votre réponse rapide. Le problème : J'ai installé MAMP sur mon Mac (mon serveur ubuntu est actuellement en panne) et pour une raison quelconque, mon Unit-Test utilise le /etc/php.ini au lieu du /Applicaton/MAMP/:bla:/php.ini Donc, pour continuer dans mon code, j'ai simplement copié les chemins des sockets de la Mamp-ini dans le etc/php.ini et ça marche !

1 votes

Heureux de voir que j'ai pu vous aider, et que vous avez résolu votre problème :-) ; ; merci pour le commentaire et l'explication du "pourquoi" cela ne fonctionnait pas ! Amusez-vous bien ;-)

3 votes

Merci pour l'astuce et aussi le commentaire, je suis aussi sur Mac, j'ai eu le même problème. Je n'utilise pas de php.ini, donc j'ai juste lancé "sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock" et c'est bon maintenant.

36voto

lijinma Points 619

Ne supposez pas votre unix_socket qui serait différent d'un à l'autre, essayez de le trouver.

Tout d'abord, récupérer l'emplacement de votre unix_socket .

$ mysql -u root -p

Entrez votre mot de passe mysql et connectez-vous à votre serveur mysql depuis la ligne de commande.

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+

Votre unix_soket peut être différent.

Ensuite, modifiez votre php.ini, trouvez votre php.ini fichier de

<? phpinfo();

Il se peut que vous installiez plusieurs php avec des versions différentes, donc ne supposez pas l'emplacement de votre fichier php.ini, obtenez-le de votre 'phpinfo' ;

Modifiez votre php.ini :

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

Puis redémarrez votre apache ou votre php-fpm.

1 votes

J'ai eu exactement le même problème : j'avais une valeur vide dans mysql.default_socket, donc j'ai changé la valeur pour l'emplacement réel du socket comme lijinma l'a indiqué et ça a marché ! merci !

15voto

Jordi Corominas Points 447

Essayez de définir host=127.0.0.1 dans votre fichier de paramètres de base de données, cela a fonctionné pour moi ! :)

J'espère que cela vous aidera !

6voto

risnandar Points 2236

J'ai eu ce problème en utilisant l'indexeur Magento sous OSX. et oui, c'est lié au problème de php lors de la connexion à mysql via pdo.

sous mac osx xampp, pour résoudre ce problème vous devez créer un lien symbolique vers le répertoire /var/mysql, voici comment faire

cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

si le répertoire /var/mysql n'existe pas, nous devons le créer avec

sudo mkdir /var/mysql

3 votes

Fonctionne aussi avec mamp ; cd /var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

4 votes

Au lieu de ce méchant hack, vous devriez envisager de créer une php.ini pour OSX PHP ( sudo cp /private/etc/php.ini.default /private/etc/php.ini ) et cherchez ensuite pdo_mysql.default_socket et l'ensemble est comme : pdo_mysql.default_socket=/Applications/MAMP/tmp/mysql/mysql.‌​sock (pour MAMP).

0 votes

Cd /var/mysql && sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock Ça a marché sur mon installation MAMP / Laravel aussi.

4voto

Omal Perera Points 1658

J'ai également souffert de ce problème & simplement, en ajouter le numéro de port après l'adresse IP m'a sauvé.

$dsn = 'mysql:dbname=sms_messenger;host=127.0.0.1:8889';
$user = 'root';
$password = 'root';

Cela fonctionne pour Mac OS

Si vous ne connaissez pas votre numéro de port mysql, alors
Vous pouvez facilement trouver le numéro de port sur la page d'accueil de MAMP.

OU

Tapez la commande suivante pendant le fonctionnement du serveur MAMP pour basculer le terminal en mysql

OMBP:mamp Omal$ /Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot

Puis tapez

mysql> SHOW GLOBAL VARIABLES LIKE 'PORT';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X