我已将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}
答案 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 /密码。
答案 1 :(得分:8)
Laravel 4:在app/config/database.php
尝试将主机从localhost
更改为127.0.0.1
Laravel 5:在.env
文件中,将DB_HOST
从localhost
更改为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服务器:
它应该有用!
答案 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);
?>
获取此代码
答案 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文件,并且文件状态应该良好。