2011-07-10 17 views
1

到MySQL時,我有以下PHP文件:只獲得一個MySQL錯誤2002使用本地主機時(而不是127.0.0.1)連接使用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一起使用,以及爲什麼使用localhost127.0.0.1的工作方式不同?

額外的信息(谷歌的一些答覆表示這些都是很重要):

  • 127.0.0.1 localhost出現在我的/etc/hosts文件,ping localhost工作正常,並點擊了127.0.0.1地址。在/etc/hosts文件中沒有提及localhost的其他行。
  • 我在Mac OSX Snow Leopard中運行它。
  • 最後,該命令stat /tmp/mysql.sock的結果是:

    234881044 28829652 srwxrwxrwx 1 _mysql輪0 0 「07月10 18點29分37秒2011」, 「07月10 18點29分37秒2011」,「18年7月10日:29:37 2011" , 「07月10 18點29分09秒2011」 4096 0 0 /tmp/mysql.sock

回答

5

MySQL客戶端神奇知道 '本地主機' 是指本地計算機,所以它試圖連接到Unix套接字而不是發出網絡請求 - 這實際上更有效。這裏的問題是你要麼不使用Unix套接字,要麼 - 更可能的是 - MySQL客戶端庫不知道在哪裏找到Unix套接字文件。

我希望我能告訴你在哪裏配置的生活,但a)我沒有積極使用MySQL超過3年,b)我從未在OSX上使用過MySQL。

+2

謝謝,這是我需要的線索!因爲它一定是一個沒有找到sql套接字的php問題,所以我在php.ini中搜索了「套接字」,並找到了錯誤值「mysql.default_socket」的選項。將其更改爲「/tmp/mysql.sock」解決了該問題。 –

+0

或者你可以在php.ini中註釋掉硬編碼的mysql.sock值,然後使用正確的默認值 – Magnus

相關問題