我有以下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');
一切正常。如何解决此问题,以便它可以与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
答案 0 :(得分:5)
MySQL客户端神奇地知道'localhost'意味着本地机器,因此它尝试连接到Unix套接字而不是发出网络请求 - 这实际上更有效。这里的问题是你要么不使用Unix套接字,要么 - 可能更有可能 - MySQL客户端库不知道在哪里可以找到Unix套接字文件。
我希望我可以告诉你配置在哪里,但是a)我在3年多没有积极使用MySQL,以及b)我从未在OSX上使用MySQL。