2010-01-08 56 views
1

我面臨一個奇怪的情況。當我嘗試使用「mysql」連接連接到MySql數據庫時,它可以工作。當使用mysqli或PDO時無法通過PHP腳本連接到MySQL但是mysql工作

mysql connection string -> mysql_connect($HOST, $USER, $PASSWORD, $DB); 

但連接立即失敗失敗時,我請使用 「mysqli的」 或 「PDO」

mysqli connection string -> mysqli_connect($HOST, $USER, $PASSWORD, $DB); 
PDO Connection string -> new PDO("mysql:host=$HOST;dbname=$DB", $USER, $PASSWORD); 

的特定錯誤,它拋出是,

SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'localhost' (10061 

你們可以幫忙我出去了?謝謝。

+0

猜測:檢查它是否安裝。 – lemon 2010-01-08 00:41:07

+0

是的,他們都安裝。當PDO連接嚴格失敗時,我會得到一個正確的PDOException。 mysqli也一樣。 – Chantz 2010-01-08 00:43:41

回答

5

我已經遇到過這個問題。最常見的解釋是MySQL服務器配置爲在一個路徑上使用套接字文件,但php.ini的mysqli或pdo_mysql部分正在另一個路徑中查找套接字文件。

即使我從MacPorts安裝PHP和MySQL,這也發生在我身上。你會認爲他們會讓這兩個端口的配置達成一致。

請編輯您的php.ini以設置套接字文件的正確位置,或者在使用mysqli或pdo_mysql啓動連接時指定套接字。

pdo = new PDO("mysql:dbname=test;unix_socket=/opt/local/var/run/mysql5/mysqld.sock", 
    "username", "password") 

$mysqli = new mysqli("localhost", "username", "password", "test", 
    ini_get("mysqli.default_port"), "/opt/local/var/run/mysql5/mysqld.sock") 

請參閱我寫的文章Error2003-CantConnectToMySQLServer

+0

我嘗試了你的建議,但它不起作用。主要是因爲我不知道套接字文件在哪裏。另外我在Windows Box上。我忘記提及的另一件事是,我的apache實例從便攜式服務器(Server2Go)運行。這有什麼區別? – Chantz 2010-01-08 02:07:36

+0

哦,如果它是Windows,那麼套接字的想法是無關緊要的。這隻適用於UNIX/Linux。 – 2010-01-08 03:51:24

+0

這對我們有效。在我們的例子中,我們已經設置了mysqli.default_socket,所以我用ini_get取代了它,它工作得很好。 – Renee 2012-12-18 19:43:07

相關問題