我的代码昨天工作得很好,今天它突然间只是不想连接到我的数据库。我没有更改它或代码上的设置,我也没有更新任何软件。我所做的就是:
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进行连接。我究竟做错了什么?这里有什么我想念的吗?
感谢您的帮助。
答案 0 :(得分:86)
您使用的是Unix套接字。当读取“localhost”时,MySQL客户端库不会将其解释为TCP主机“localhost”并解析该名称,但使用默认的Socket位置。要在本地计算机上使用TCP,必须使用127.0.0.1
作为主机名。
在DSN中指定过去使用unix_socket
而不是host
。用于localhost
的套接字的位置可以在编译时或在pdo_mysql.default_socket
中使用php.ini
的某些版本的PHP中定义。
答案 1 :(得分:9)
关于使用PDO连接到MySQL的PHP文档:PDO_MYSQL DNS
最后的说明是:
仅限Unix:
当主机名设置为“localhost”时,则连接到 服务器是通过域套接字生成的。如果编译PDO_MYSQL libmysql然后套接字文件的位置是libmysql的 编译到位。如果PDO_MYSQL是针对mysqlnd编译的 默认套接字可以通过pdo_mysql.default_socket设置来设置。
所以为了解决这个问题,你必须在php.ini中正确配置mysql.sock的位置
找到你的mysql.sock文件。常见位置:
编辑php.ini文件并正确设置pdo_mysql.default_socket的值
重新启动Apache服务器以获取php.ini文件中的更改
答案 2 :(得分:2)
在Ubuntu上,您可以在php.ini中使用此设置
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
答案 3 :(得分:1)
我刚刚添加了这一行:
'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
一切都很顺利。
答案 4 :(得分:0)
Drush的文档有更新,记录为here。