使用PHP / PDO连接MySQL时出错

时间:2009-11-30 12:39:55

标签: 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进行连接。我究竟做错了什么?这里有什么我想念的吗?

感谢您的帮助。

5 个答案:

答案 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的位置

  1. 找到你的mysql.sock文件。常见位置:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • 或者如果您使用MAMP或LAMP在mysmp的tmp文件夹中查找
  2. 编辑php.ini文件并正确设置pdo_mysql.default_socket的值

  3. 重新启动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

相关问题