PDOException:SQLSTATE [HY000] [2002]没有这样的文件或目录

时间:2015-04-17 09:32:15

标签: php mamp

我已将PushChatServer目录放在htdocs文件夹中并创建数据库puschat尝试运行@" http://localhost/PushChatServer/api/test/database.php"

然后我遇到了异常。

我想做同样的事情来解释这个链接http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2

我做了所有这些,但我得到了这个例外

  

无法连接到数据库。原因:异常' PDOException' with message' SQLSTATE [HY000] [2002]没有这样的文件或目录'在/Applications/MAMP/htdocs/PushChatServer/api/test/database.php:17堆栈跟踪:#0 /Applications/MAMP/htdocs/PushChatServer/api/test/database.php(17):PDO-> __ construct( ' mysql:host = loca ...',' root',' root',Array)#1 {main}

10 个答案:

答案 0 :(得分:15)

快速测试(在shell中运行):

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.sock (见PHP - MySQL connection not working: 2002 No such file or directory

SQLSTATE [HY000] [1044]拒绝访问用户'用户名' @' localhost' 祝贺!您现在拥有正确的mysql.default_socket设置。修复你的dbname / username /密码。

另见Error on creating connection to PDO in PHP

答案 1 :(得分:8)

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

答案 2 :(得分:4)

我使用PHP 5.6.30(macOS Sierra)和简单的PDO代码有同样的错误:

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

我收到了同样的错误消息。要修复,我改变了#34; 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', '');"

这项工作适合我!

答案 3 :(得分:3)

重新启动数据库和本地Web服务器:

  • sudo service mysqld restart
  • sudo service mysqld restart

它应该有用!

答案 4 :(得分:3)

我不确定这对你有用吗?但我使用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),
    ]

答案 5 :(得分:3)

我对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

获取此代码

答案 6 :(得分:2)

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提供不同的行为。

因此,如果您想与PDO使用TCP连接,请不要使用localhost,而是使用127.0.0.1。

答案 7 :(得分:0)

刚遇到同样的问题,问题就是密码。在教程中,作者将密码列为:

"d]682\#%yl1nb3"

因此,根据@ Marki555给出的建议,我查看了配置文件 - api_config.php。并列出的密码是:

"d]682\#%yI1nb3"

大写'I'是导致问题的原因,因为您在db上为用户设置的密码的密码为小写l但是它确实在寻找大写的I.我改变了pushchat用户的密码后一个大写的我,它工作了!

答案 8 :(得分:0)

在shell中运行以下命令,我认为这会有所帮助。

git clone ssh://git@github.com/organization/repo

答案 9 :(得分:0)

在Mac OSX / MAMP上,您可以在/ Applications / MAMP / tmp / mysql文件夹中找到mysql.sock.lock文件。

您可以安全地删除mysql.sock.lock文件,并且文件状态应该良好。