我有以下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文件中.最后,该命令的结果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
MySQL客户端神奇地知道'localhost'意味着本地机器,因此它尝试连接到Unix套接字而不是发出网络请求 - 这实际上更有效.这里的问题是你要么不使用Unix套接字,要么 - 可能更有可能 - MySQL客户端库不知道在哪里可以找到Unix套接字文件.
我希望我可以告诉你配置在哪里,但是a)我在3年多没有积极使用MySQL,以及b)我从未在OSX上使用过MySQL.