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?
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?)
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.
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!
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
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';
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
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