只有在使用php连接到mysql时使用localhost(而不是127.0.0.1)时才会出现mysql 2002错误

时间:2011-07-10 12:13:08

标签: php mysql

我有以下php文件:

<?php
function show_error($stage) {
    echo "<p>MySql error: " . mysql_error() . '</p>';
    echo "<p>ErrorCode: " . mysql_errno() . '</p>';
    die($stage);

}

$link = mysql_connect('localhost', 'blog', 'sql-password');
if (!$link) {
    show_error('connect');
}
mysql_select_db('blog') or show_error();
$result = mysql_query('select col1 from test_table');
if (!$result) {
    show_error('query');
}
$col = mysql_result($result, 0);
echo "<p>Result is: [" . $col . "]</p>";
mysql_close($link);
?>

当我运行时,我收到错误:

MySql error: No such file or directory

ErrorCode: 2002

connect

但是,如果我改变了行

$link = mysql_connect('localhost', 'blog', 'my-password'); 

$link = mysql_connect('127.0.0.1', 'blog', 'my-password'); 

一切正常。如何解决此问题,以便它可以与localhost127.0.0.1一起使用,为什么使用localhost的工作方式与127.0.0.1不同?

额外信息(一些谷歌回复表明这些很重要):

  • 127.0.0.1 localhost出现在我的/etc/hosts文件中,ping localhost正常工作,并点击127.0.0.1地址。 localhost文件中没有其他行提及/etc/hosts
  • 我在Mac OSX Snow Leopard中运行它。
  • 最后,命令stat /tmp/mysql.sock的结果是:

    234881044 28829652 srwxrwxrwx 1 _mysql wheel 0 0“Jul 10 18:29:37 2011”“Jul 10 18:29:37 2011”“Jul 10 18:29:37 2011”“Jul 10 18:29:09 2011 “4096 0 0 /tmp/mysql.sock

1 个答案:

答案 0 :(得分:5)

MySQL客户端神奇地知道'localhost'意味着本地机器,因此它尝试连接到Unix套接字而不是发出网络请求 - 这实际上更有效。这里的问题是你要么不使用Unix套接字,要么 - 可能更有可能 - MySQL客户端库不知道在哪里可以找到Unix套接字文件。

我希望我可以告诉你配置在哪里,但是a)我在3年多没有积极使用MySQL,以及b)我从未在OSX上使用MySQL。