web-dev-qa-db-ja.com

PDOException:SQLSTATE [HY000] [2002]そのようなファイルまたはディレクトリはありません

PushChatServer dirをhtdocsフォルダーに配置し、データベースpuschatを作成して@ " http://localhost/PushChatServer/api/test/database.php "を実行しようとしました

その後、次の例外が発生しました。

このリンクを説明するために同じことをしたい http://www.raywenderlich.com/32963/Apple-Push-notification-services-in-ios-6-tutorial-part-2

私はそれをすべてやったが、この例外を受け取った

データベースに接続できませんでした。理由:メッセージ 'SQLSTATE [HY000] [2002] No application file/directory' with /Applications/MAMP/htdocs/PushChatServer/api/test/database.php:17スタックトレース:#0/Applications/MAMPの例外 'PDOException' /htdocs/PushChatServer/api/test/database.php(17):PDO-> __ construct( 'mysql:Host = loca ...'、 'root'、 'root'、Array)#1 {main}

7
user4276168

クイックテスト(シェルで実行):

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

SQLSTATE [HY000] [2002]そのようなファイルまたはディレクトリがないことは、phpがmysql.default_socketファイルを見つけることができないことを意味します。 php.iniファイルを変更して修正します。 Macではmysql.default_socket = /tmp/mysql.sockPHP-MySQL connection not working:2002 No such file or directory )を参照してください

SQLSTATE [HY000] [1044]ユーザー 'username' @ 'localhost'のアクセスが拒否されましたおめでとうございます!これで、正しいmysql.default_socket設定ができました。 dbname/username/passwordを修正します。

PHPでPDOへの接続を作成する際のエラー も参照してください。

18
hhwithgroups

ホストをlocalhostから127.0.0.1に変更する必要があります

Laravel 4:app/config/database.phpで、ホストをlocalhostから127.0.0.1に変更してみてください

Laravel 5:.envファイルで、DB_Hostlocalhostから127.0.0.1に変更します

ソース: PDOException SQLSTATE [HY000] [2002] No such file or directory

14
Adrian Enriquez

PHP 5.6.30(macOS Sierra)を使用して、次のような単純なPDOコードで同じエラーが発生しました。

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

そして、私は同じエラーメッセージを受け取りました。修正するために、コードの「localhost」をIP(ループバック)「127.0.0.1」に変更しました。

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

接続をテストするには:

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

この作品は私のためです!

5
Isa Souza

データベースとローカルWebサーバーを再起動します。

  • Sudoサービスmysqldの再起動
  • Sudoサービスmysqldの再起動

うまくいくはずです!

4
RAWGIT

Mysql PDOでも同じエラーが発生しました。このコードはうまくいきます!

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

次のコードを取得しました: http://php.net/manual/en/ref.pdo-mysql.connection.php

3
Kuhan

これがあなたに役立つかどうかはわかりません。しかし、私はCakePHPを使用し、「ホスト」の最後にポート番号を置くのを忘れると、このエラーが発生します。

お役に立てれば!

'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),
    ]

'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はlocalhostを非常に特に扱います:

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

注:Unixのみ:ホスト名が「localhost」に設定されている場合、サーバーへの接続はドメインソケットを介して行われます。 PDO_MYSQLがlibmysqlclientに対してコンパイルされる場合、ソケットファイルの場所はlibmysqlclientのコンパイルされた場所にあります。 PDO_MYSQLがmysqlndに対してコンパイルされる場合、pdo_mysql.default_socket設定を介してデフォルトのソケットを設定できます。

PDOとmysql_connectがlocalhostに異なる動作を与える理由。

したがって、TCP PDOとの接続を使用する場合は、localhostではなく127.0.0.1。を使用します

2
Thomas Decaux

シェルで次のコマンドを実行すると、役立つと思います。

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

この同じ問題に遭遇しただけで、問題はパスワードです。チュートリアルでは、作成者はパスワードを次のようにリストします。

"d]682\#%yl1nb3"

@ Marki555の提案に従って、構成ファイルapi_config.phpを調べました。そしてそこにリストされているパスワードは次のとおりです。

"d]682\#%yI1nb3"

大文字の「I」は、dbでユーザーに設定したパスワードに小文字のlのパスワードがあるために問題が発生しましたが、実際には大文字のIを探しています。プッシュチャットのユーザーのパスワードを変更して大文字のi 、 動いた!

0
Obsidian