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