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

Dav*_*ani 1 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);
?>
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到错误:

MySql error: No such file or directory

ErrorCode: 2002

connect
Run Code Online (Sandbox Code Playgroud)

但是,如果我改变了这条线

$link = mysql_connect('localhost', 'blog', 'my-password'); 
Run Code Online (Sandbox Code Playgroud)

$link = mysql_connect('127.0.0.1', 'blog', 'my-password'); 
Run Code Online (Sandbox Code Playgroud)

一切正常.我如何解决这个问题,以便它可以使用localhost或者127.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

Fli*_*mzy 5

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

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

  • 谢谢,这是我需要的线索!因为它一定是php问题而没有找到sql套接字,所以我在php.ini中查找了"socket",并找到了选项"mysql.default_socket",它的值有误.将其更改为"/tmp/mysql.sock"修复了问题. (2认同)