启用 PDO 后 - 错误 2002 getaddrinfo failed: Name or service not known

Posted

技术标签:

【中文标题】启用 PDO 后 - 错误 2002 getaddrinfo failed: Name or service not known【英文标题】:After enabling PDO - Error 2002 getaddrinfo failed: Name or service not known 【发布时间】:2012-11-08 02:24:17 【问题描述】:

我最近了解了 PDO,所以我更改了我的 php 文件以适应格式,现在我收到了这个回复:

ERROR: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

我没有更改连接变量,只是更改了适合 PDO 的格式。我正在运行 Bitnami Lampstack (5.3.16-0) 并按照文档中的说明操作,在 php.ini 文件中使用 mysql 取消注释 PDO 行。我想知道它是否与我的大小为 0 的 mysql.sock 文件有关。

我的 PDO 连接看起来像这样(我添加了 unix_socket 和端口部分,因为在另一个与此错误相关的问题中提到了它们,但它们似乎没有帮助):

$dbConnection = new PDO('mysql:unix_socket=/opt/lampstack-5.3.16-0/mysql/tmp/mysql.sock;host=$dbhost;port=3306;dbname=$dbname;', $user, $pass);

apache、mysql、httpd 等都在我的服务器上运行良好,并且只有在启用 PDO 后才会出现。

【问题讨论】:

【参考方案1】:

首先,您的示例中的连接字符串是单引号,因此变量替换不起作用。如果您打算使用变量 $dbhost 的内容,请使用双引号。

其次,您不应同时指定本地套接字和主机/端口。选择一个或另一个。我从您的帖子中猜测套接字不是最初的意图。

试试这个:

 $dbConnection = new PDO("mysql:host=$dbhost;port=3306;dbname=$dbhost", $user, $pass);

此外,您的示例将 dbname 指向 $dbhost 变量。这是一个错字吗?

套接字都是 0 字节。它们只是可以读取和写入的命名管道,但它们本身没有内容。如果您想使用它,只需验证套接字是否存在。

祝你好运!

【讨论】:

好的,所以单独使用 unix_socket 可以,但是带有端口的主机不能。我想我会坚持使用 unix_socket。谢谢! - 不幸的是,我收到了unknown database: $dbname 我不允许将 dbname 放在用户名和密码之类的变量中吗? 是的,指向 $dbhost 的 dbname 是一个错字。我解决了这个问题以及你提到的其他问题。谢天谢地,除了返回未定义外,它现在可以工作了,但我会弄清楚的!再次感谢雷!【参考方案2】:

"mysql:host='localhost';dbname='data';charset=utf8" 您的 DSN 格式错误,其中不应包含这些引号。这是正确的格式

//$con=new PDO($dsn, $user, $password); $con=new PDO('mysql:dbname=testdb;host=127.0.0.1','root','');

【讨论】:

以上是关于启用 PDO 后 - 错误 2002 getaddrinfo failed: Name or service not known的主要内容,如果未能解决你的问题,请参考以下文章

SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

什么会导致间歇性 SQLSTATE[HY000] [2002] Debian Lenny 上的 php PDO mysql 没有此类文件或目录错误? [复制]

SQLSTATE[HY000] [2002] 权限被拒绝 Laravel PDO 驱动程序(凭证通过工匠迁移工作)

Linux + Phinx + XAMPP = 错误 - 需要启用 PDO_Mysql 扩展

SQLSTATE[HY000] [2002] 操作超时

未找到 ZF2 类 PDO,但在 php 配置中启用了 PDO