PDOException: SQLSTATE[HY000] [2002] Nu există un astfel de fișier sau director (Programare, Php, Mamp)

user4276168 a intrebat.

Am pus PushChatServer dir în folderul htdocs și am creat baza de date puschat încercați să rulați @”http://localhost/PushChatServer/api/test/database.php

Apoi am primit următoarea excepție.

Vreau să fac același lucru pentru a explica acest link http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2

Am făcut toate astea, dar am primit această excepție

Nu s-a putut conecta la baza de date. Motivul: excepție ‘PDOException’ cu mesajul ‘SQLSTATE[HY000] [2002] No such file or directory’ în /Applications/MAMP/htdocs/PushChatServer/api/test/database.php:17 Stack trace: #0 /Applications/MAMP/htdocs/PushChatServer/api/test/database.php(17): PDO->__construct(‘mysql:host=loca…’, ‘root’, ‘root’, Array) #1 {main}

Comentarii

  • Sper că cineva poate răspunde, pentru că din punctul meu de vedere problema ar trebui să fie mai bine descrisă… –  > Por ZygD.
  • Presupun că aveți o credențială greșită pentru mysql definită (nume de gazdă mysql, utilizator, parolă) –  > Por Marki555.
  • unde pot verifica credențialele mysql? @Marki555 – user4276168
  • posibil duplicat al Eroare la crearea conexiunii la PDO în PHP –  > Por David ‘mArm’ Ansermot.
  • Posibil duplicat al PHP – Conexiunea MySQL nu funcționează: 2002 No such file or directory –  > Por kenorb.
10 răspunsuri
Adrian Enriquez

Trebuie să schimbați gazda de la localhost la 127.0.0.1

Laravel 4: În app/config/database.php încercați să schimbați gazda de la localhost la 127.0.0.1

Laravel 5: În .env schimbați DB_HOST de la localhost la 127.0.0.1

Sursa: PDOException SQLSTATE[HY000] [2002] No such file or directory

Comentarii

  • Din nu știu ce motiv ciudat, acest lucru a funcționat pentru mine – nextcloud pe MySQL. –  > Por cslotty.
hhwithgroups

Test rapid (rulat în shell):

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

SQLSTATE[HY000] [2002] Nu există un astfel de fișier sau director înseamnă că php nu poate găsi fișierul mysql.default_socket. Remediați problema modificând fișierul php.ini. Pe Mac, acesta este mysql.default_socket = /tmp/mysql.sock (Consultați PHP – Conexiunea MySQL nu funcționează: 2002 No such file or directory)

SQLSTATE[HY000] [1044] Acces refuzat pentru utilizatorul ‘username’@’localhost’ FELICITĂRI! Aveți acum setarea corectă mysql.default_socket. Corectați dbname/numele de utilizator/parola.

Consultați și Eroare la crearea conexiunii la PDO în PHP

Comentarii

  • Vă mulțumim! Acest lucru a funcționat pentru mine. Folosesc PHP 7.1.9 pe Mac OS X 10.10 care rulează serverul mysql 5.7 de la macport. Pentru mysql de la macport, mysql.sock trăiește la /opt/local/var/run/mysql57/mysqld.sock. Am întâlnit această eroare încercând să execut ‘php artisan migrate:install’ folosind laravel 5.5. –  > Por RJ Cole.
  • hello community , primesc o eroare similară chiar dacă nu folosesc laravel puteți să vă uitați la problemă aici este stackoverflow.com/questions/60796332/… -…  > Por Kiran Patel.
Isa Souza

Am avut aceeași eroare folosind PHP 5.6.30 (macOS Sierra) cu codul simplu PDO ca:

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

Și am primit același mesaj de eroare. Pentru a rezolva, am schimbat „localhost” pentru IP (loopback) „127.0.0.1” în codul meu:

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

Pentru a testa conexiunea:

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

Acest lucru funcționează pentru mine!

RAWGIT

Reporniți baza de date și serverul web local:

sudo service mysqld restart

Ar trebui să funcționeze!

Comentarii

  • Acest răspuns a fost votat în jos, probabil pentru că nu este un răspuns foarte „tehnic”, dar a funcționat pentru mine, așa că un vot în sus mi se pare corect. –  > Por Simpla dezvoltare.
user7404314

Nu sunt sigur dacă acest lucru va funcționa pentru tine; dar eu folosesc CakePHP, și primesc această eroare ori de câte ori uit să pun numărul de port la sfârșitul „host”.

Sper că asta vă ajută!

Înainte de

'test' => [
        'className' => 'CakeDatabaseConnection',
        'driver' => 'CakeDatabaseDriverMysql',
        '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),
    ]

După

'test' => [
        'className' => 'CakeDatabaseConnection',
        'driver' => 'CakeDatabaseDriverMysql',
        '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),
    ]

Thomas Decaux

PDO tratează localhost foarte special:

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

Notă: Numai pe Unix: Când numele de gazdă este setat la „localhost”, atunci conexiunea la server se face prin intermediul unui socket de domeniu. Dacă PDO_MYSQL este compilat în raport cu libmysqlclient, atunci locația fișierului socket este la locația compilată în libmysqlclient. În cazul în care PDO_MYSQL este compilat cu mysqlnd, se poate seta un socket implicit prin intermediul setării pdo_mysql.default_socket.

De aceea, PDO și mysql_connect vor avea un comportament diferit pentru localhost.

Prin urmare, dacă doriți să utilizați o conexiune TCP cu PDO, nu utilizați niciodată localhost, ci 127.0.0.0.1.

Kuhan

Am avut aceeași eroare pentru Mysql PDO, acest cod funcționează pentru mine!

<?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);
?>

am luat acest cod de la : http://php.net/manual/en/ref.pdo-mysql.connection.php

Tauhed

Rulați următoarea comandă în shell, cred că vă va ajuta.

php artisan cache:clear
php artisan config:clear 
php artisan view:clear

J Harvey

Pe Mac OSX/MAMP este posibil să găsiți un fișier mysql.sock.lock în dosarul /Applications/MAMP/tmp/mysql.

Puteți elimina în siguranță fișierul mysql.sock.lock și ar trebui să fiți în formă bună.

mattyb

Tocmai am dat peste aceeași problemă și problema este parola. În tutorial, autorul enumeră parola ca fiind:

"d]682#%yl1nb3"

Deci, conform sugestiei date de @Marki555, m-am uitat în fișierul de configurare – api_config.php. și parola listată acolo este:

"d]682#%yI1nb3"

Majusculă „I” este ceea ce a cauzat problema, deoarece parola pe care ați setat pentru utilizator pe db are parola cu l minusculă, dar într-adevăr este în căutarea pentru majusculă I. După ce am schimbat parola utilizatorului pushchat pentru a avea un i majusculă, a lucrat!

Tags:,