web-dev-qa-db-fra.com

PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type

J'ai mis le répertoire PushChatServer dans le dossier htdocs et créé la base de données puschat, essayez d'exécuter @ " http: //localhost/PushChatServer/api/test/database.php "

Ensuite, j'ai eu l'exception suivante.

Je veux faire la même chose pour expliquer ce lien http://www.raywenderlich.com/32963/Apple-Push-notification-services-in-ios-6-tutorial-part-2

J'ai fait tout ça mais j'ai eu cette exception

Impossible de se connecter à la base de données. Raison: exception "PDOException" avec le message "SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type" dans /Applications/MAMP/htdocs/PushChatServer/api/test/database.php:17 Trace de pile: # 0/Applications/MAMP /htdocs/PushChatServer/api/test/database.php(17): PDO -> __ construct ('mysql: Host = loca ...', 'root', 'root', Array) # 1 {main}

7
user4276168

Test rapide (exécuté dans Shell):

php -r "new PDO('mysql:hostname=localhost;dbname=test', 'username', 'password');"

SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type signifie que php ne peut pas trouver le fichier mysql.default_socket. Corrigez-le en modifiant le fichier php.ini. Sur Mac, c'est mysql.default_socket = /tmp/mysql.sock (Voir PHP - La connexion MySQL ne fonctionne pas: 2002 Aucun fichier ou répertoire de ce type )

SQLSTATE [HY000] [1044] Accès refusé à l'utilisateur 'username' @ 'localhost' FÉLICITATIONS! Vous disposez maintenant du paramètre mysql.default_socket correct. Corrigez votre nom d'utilisateur/nom d'utilisateur/mot de passe.

Voir aussi Erreur lors de la création d'une connexion à PDO en PHP

18
hhwithgroups

Vous devez changer l'hôte de localhost à 127.0.0.1

Laravel 4: Dans votre app/config/database.php essayez de changer l'hôte de localhost en 127.0.0.1

Laravel 5: Dans le .env fichier, modifier DB_Host de localhost à 127.0.0.1

Source: PDOException SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type

14
Adrian Enriquez

J'ai eu la même erreur en utilisant PHP 5.6.30 (macOS Sierra) avec le code PDO simple comme:

$pdo = new PDO('mysql:Host=localhost;dbname=db_php', 'root', '');

Et j'ai reçu le même message d'erreur. Pour corriger, j'ai changé "localhost" pour IP (loopback) "127.0.0.1" dans mon code:

$pdo = new PDO('mysql:Host=127.0.0.1;dbname=db_php', 'root', '');

Pour tester la connexion:

$ php -r "new PDO('mysql:Host=127.0.0.1;dbname=db_php', 'root', '');"

Ce travail est pour moi!

5
Isa Souza

Redémarrez votre base de données et votre serveur Web local:

  • Sudo service mysqld restart
  • Sudo service mysqld restart

Ça devrait marcher!

4
RAWGIT

J'ai eu la même erreur pour Mysql PDO, ce code fonctionne pour moi!

<?php
$dsn = 'mysql:Host=127.0.0.1;dbname=testdb';
$username = 'username';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);
?>

a obtenu ce code de: http://php.net/manual/en/ref.pdo-mysql.connection.php

3
Kuhan

Je ne sais pas si cela fonctionnera pour vous; mais j'utilise CakePHP, et j'obtiens cette erreur chaque fois que j'oublie de mettre le numéro de port à la fin de l'hôte.

J'espère que cela t'aides!

Avant

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'Host' => 'localhost',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]

Après

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'Host' => 'localhost:8080',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]
3
user7404314

PDO traite tout particulièrement les hôtes locaux:

De http://php.net/manual/en/ref.pdo-mysql.connection.php :

Remarque: Unix uniquement: lorsque le nom d'hôte est défini sur "localhost", la connexion au serveur est établie via une socket de domaine. Si PDO_MYSQL est compilé avec libmysqlclient, l'emplacement du fichier socket se trouve à l'emplacement compilé dans libmysqlclient. Si PDO_MYSQL est compilé avec mysqlnd, un socket par défaut peut être défini via le paramètre pdo_mysql.default_socket.

C'est pourquoi PDO et mysql_connect donneront un comportement différent pour localhost.

Donc, si vous souhaitez utiliser une connexion TCP avec PDO, n'utilisez jamais localhost mais 127.0.0.1.

2
Thomas Decaux

Exécutez la commande suivante dans Shell, je pense que cela vous aidera.

php artisan cache:clear
php artisan config:clear 
php artisan view:clear
0
Tauhed

Je viens de rencontrer ce même problème et le problème est le mot de passe. Dans le didacticiel, l'auteur répertorie le mot de passe comme suit:

"d]682\#%yl1nb3"

Donc, selon la suggestion donnée par @ Marki555, j'ai regardé dans le fichier de configuration - api_config.php. et le mot de passe qui y figure est:

"d]682\#%yI1nb3"

Le `` I '' majuscule est la cause du problème car le mot de passe que vous définissez pour l'utilisateur sur la base de données a le mot de passe avec le l minuscule mais il recherche vraiment le majuscule I. Après avoir changé le mot de passe de l'utilisateur pushchat pour avoir un i majuscule , ça a marché!

0
Obsidian