警告: PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接)
我的代码昨天工作得很好,今天它突然不想连接到我的数据库。我没有更改它或代码上的任何设置,也没有更新任何软件。我所做的就是这样:
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
我收到一条很好的异常消息,上面写着:
警告:PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接)
问题是:我显然没有尝试使用一个unix套接字但使用TCP/IP。我做错了什么?我在这里缺少什么吗?
感谢您的任何帮助。
My code was working all fine yesterday and today it suddenly just don't want to connect to my database. I have changed no settings on it or on the code and I haven't updated any software either. All I do is this:
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
And I get a nice exception message saying this:
Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...
The thing is: I'm clearly not trying to connect using a unix socket but using TCP/IP. What am I doing wrong? Is there something I'm missing here?
Thanks for any help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您正在使用 Unix 套接字。当读取“localhost”时,MySQL 客户端库不会将其解释为 TCP 主机“localhost”并解析该名称,而是使用默认的套接字位置。要在本地计算机上使用 TCP,您必须使用
127.0.0.1
作为主机名。要指定过去,请在 DSN 中使用
unix_socket
而不是host
。用于localhost
的套接字位置可以在编译时定义,或者在某些版本的 PHP 中使用php.ini
中的pdo_mysql.default_socket
进行定义。You are using a Unix socket. When reading "localhost" MySQL client libraries don't interpret it as TCP host "localhost" and resolve that name but use the default Socket location. For using TCP on the local machine you have to use
127.0.0.1
as hostname.To specify the past use
unix_socket
instead ofhost
in the DSN. The location of the socket used forlocalhost
can be defined at compile time or in some versions of PHP usingpdo_mysql.default_socket
in thephp.ini
.来自有关使用 PDO 连接到 MySQL 的 PHP 文档: PDO_MYSQL DNS
的注释最后说:
因此,为了解决这个问题,您必须在 php.ini 中正确配置 mysql.sock 的位置
找到您的 mysql.sock 文件。常见位置:
编辑您的 php.ini 文件并正确设置 pdo_mysql.default_socket 的值
From the PHP documentation about connection to MySQL using PDO: PDO_MYSQL DNS
The note at the very end says:
So in order to fix this you would have to properly configure in php.ini the location of your mysql.sock
Find your mysql.sock file. Common locations:
Edit your php.ini file and properly set the value for pdo_mysql.default_socket
Restart your Apache server to pickup the changes in the php.ini file
在 Ubuntu 上,您可以在 php.ini 中使用此设置
On Ubuntu, you can use this setting in php.ini
Drush 文档有更新,此处记录了该更新。
There's an update to the docs for Drush which is documented here.
我刚刚添加了这一行:
一切都很好。
I just added this line:
and all was well.