“getaddrinfo失败.“从PHP(5.3.6-8)访问MySQL(5.5.17)时出现错误


"getaddrinfo failed..." error when accessing MySQL (5.5.17) from PHP (5.3.6-8)

我是一个完全的初学者,当我试图以大多数教程使用的方式连接到我的第一个真正的MySQL数据库时:

$connect = mysql_connect("localhost","user","pass")

我收到以下错误:

php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known

我搜索了互联网,但人们似乎只有在试图使用fopen()或类似的东西访问远程文件的内容时才会遇到这个问题。我发现他们的解决方案不适用于这里。我猜这与配置不当有关?

作为上下文,我正在运行OS X并从官方软件包安装程序安装MySQL。我使用的是OS X版本的PHP(5.3.6),但在愤怒中,我从http://php-osx.liip.ch/安装了这个包。它没有帮助,但是错误消息的格式更漂亮了!

编辑:我确实有一个变通的解决方案,但由于我是一个新用户,我不能发布8小时。我会尽快发布的。谢谢!

我找到了一个解决方案,但我不太知道它为什么有效。希望它能帮助到一些人:

首先,我必须编辑php.ini来改变它寻找MySQL的sock文件("/var/MySQL/MySQL .sock")到OS X软件包安装程序实际放置它的地方("/tmp/MySQL .sock")。这没有工作,但这可能是一件好事。

然后,不是通过"localhost"连接到MySQL,我尝试直接连接到那个sock文件。如:

$connect = mysql_connect(":tmp/mysql.sock","username","pass")

"localhost"在上面的例子中是隐含的。它工作!我不知道为什么,似乎我不应该每次想要连接时都指定sock文件,但它确实有效。

更新:在重新启动一切(Apache, mysqld,计算机本身)之后,我不再需要指定sock文件。我可以用localhost。"我想这意味着问题只是php.ini中的那一行,但如果是这样的话,似乎这个错误信息应该更常见,因为许多OS X用户使用MySQL包安装程序。无论如何,希望这对你有帮助。

只使用下面的代码片段并用结果刷新您的帖子。你得到的错误看起来很奇怪,不应该只发生在mysql连接上。

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

我也遇到过这个问题。我发现我在localhost上有一个尾斜杠,这可能是PHP解释为套接字地址。

$db = mysql_connect('localhost/', 'user', 'pass'); //bad
$db = mysql_connect('localhost', 'user', 'pass'); //good :)

当我在这里拼错单词'localhost'时,我有同样的错误:

$db = mysqli_connect('localhost','root',' ', 'mydb');