web-dev-qa-db-fra.com

Démarrer avec Zend Tutorial - Zend_DB_Adapter lève une 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.

Là où ça commence à devenir intéressant, mon PHP Unit Test lève cette erreur: "Zend_Db_Adapter_Exception: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type"

Je ne trouve aucun indice dans les recherches Google. J'ai tout fait comme dans le livre. Quelqu'un peut-il me donner un indice quant à l'endroit où rechercher la faute?

Est-ce une erreur de débutant commune?

69
Oliver

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

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


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

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

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


PHP doit utiliser le même fichier - et, selon votre distribution, le fichier par défaut peut différer de celui utilisé par MySQL.

Dans ce cas, ajouter ces lignes à votre fichier php.ini Peut 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 php.ini Soit prise en compte)

Le dernier devrait suffire pour PDO, qui est utilisé par Zend Framework - mais les deux précédents ne font pas de 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, totalement indépendant de Zend Framework?

c’est-à-dire fait quelque chose comme ce travail (citant) :

$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 non, le problème ne concerne définitivement pas ZF, il s'agit d'un problème de configuration/installation de PHP.

Si oui ... Cela signifie que vous avez un problème avec ZF et que vous aurez besoin de nous donner plus d'informations sur votre configuration (comme votre DSN, par exemple?)

74
Pascal MARTIN

N'assumez pas votre unix_socket qui serait différent de l'un à l'autre, essayez de le trouver.

Tout d'abord, récupérez votre emplacement unix_socket.

$ mysql -u root -p

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

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

Votre unix_soket pourrait être différent.

Puis changez votre php.ini, trouvez votre php.ini fichier de

<? phpinfo();

Vous pouvez peut-être installer beaucoup de php avec des versions différentes, alors s'il vous plait, ne supposez pas l'emplacement de votre fichier php.ini, récupérez-le à partir de votre 'phpinfo';

Changez 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 php-fpm.

35
lijinma

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

J'espère que ça aide!

15
Jordi Corominas

j'ai eu ce problème lors de l'exécution de l'indexeur magento dans osx. et oui, il est lié à un problème 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:

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

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

Sudo mkdir /var/mysql
6
risnandar

J'ai également souffert de ce problème et simplement, par en ajoutant un 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

OR

Tapez la commande suivante lors de l'exécution 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';
4
Omal Perera

Cette erreur car mysql tente de se connecter via un mauvais fichier de socket

essayez cette commande pour les serveurs MAMP

cd /var/mysql && Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

ou

cd /tmp && Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock

et cette commande pour les serveurs XAMPP

    cd /var/mysql && Sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock

ou

    cd /tmp && Sudo ln -s /Applications/XAMPP/tmp/mysql/mysql.sock
1
Alaa Attya Mohamed

Il semble que le service mysql ne fonctionne pas ou est arrêté. vous pouvez le démarrer en utilisant la commande ci-dessous (sous Ubuntu):

service mysql start

Ça devrait marcher! Si vous utilisez un système d'exploitation autre qu'Ubuntu, utilisez le moyen approprié pour démarrer mysql

1
Jitendra Mandloi