php - 警告: PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接)

标签 php mysql pdo

我的代码昨天工作得很好,今天它突然不想连接到我的数据库。我没有更改它或代码上的任何设置,也没有更新任何软件。我所做的就是这样:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

我收到一条很好的异常消息,上面写着:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

问题是:我显然不是尝试使用 unix 套接字进行连接,而是使用 TCP/IP。我究竟做错了什么?我在这里缺少什么吗?

感谢您的帮助。

最佳答案

您正在使用 Unix 套接字。当读取“localhost”时,MySQL 客户端库不会将其解释为 TCP 主机“localhost”并解析该名称,而是使用默认的套接字位置。要在本地计算机上使用 TCP,您必须使用 127.0.0.1 作为主机名。

要指定过去,请在 DSN 中使用 unix_socket 而不是 host。用于 localhost 的套接字位置可以在编译时定义,或者在某些版本的 PHP 中使用 php.ini 中的 pdo_mysql.default_socket 进行定义.

关于php - 警告: PDO::__construct(): [2002] 中没有这样的文件或目录(尝试通过 unix:///tmp/mysql.sock 连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839876/

相关文章:

php - 使用带有 PHP View 文件的 gulp 任务

php - 如何从 PHP 中的数据库中检索复选框值

mysql - 我想在 mysql 中使用 Between 运算符,但工作不正常

php - Mysql数据库不适用于连字符(-)

PHP MYSQL 多词搜索

php - MYSQL + PDO nextRowSet 循环太多次?

php - 存储在 MySQL 中的数组未被识别为值

php - 将包含对象的数组转换为一个没有 foreach 的关联数组

mysql - 在 MySQL 中存储配置的最佳方式

php - 在 Doctrine 中使用 URL 字段