2012-09-25 44 views
12

我剛剛在舊的RedHat7上安裝了MySQL服務器(版本3.23.58)。由於依賴關係,我無法安裝更新的MySQL版本。我無法更新此RedHat服務器上的館藏。mysql_connect():沒有這樣的文件或目錄

不過,我用PHP連接數據庫時遇到了問題。首先我使用了PDO,但是我意識到PDO與MySQL不兼容3.23 ...

所以我用mysql_connect()。現在我有以下錯誤:

Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9 
Error: No such file or directory 

我的代碼是:

$host = 'localhost'; 
$user = 'root'; 
$password = ''; 
$database = 'test'; 
$db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error()); 
mysql_select_db($database); 

我兩次檢查數據庫存在,登錄名和密碼是否正確。

這很奇怪,因爲代碼在Wampp的Windows PC上正常工作。我無法弄清問題來自哪裏。

有什麼想法?

+2

開始*而不是mysql_ * – Leri

+6

@PLB:你讀過的問題或只是代碼? –

+3

如果你堅持使用MySQL 3.x並使用它,那麼'mysql_ *'函數很快就會被棄用,你可能想檢查你的'php.ini'是否啓用了php_mysql'擴展。 – Havelock

回答

32

是的,你不能這樣連接!

@PLB和@jammypeach mysqli在v4.1之後,他正在使用v3 :) 如果你真的想幫忙的話,夥計們會閱讀這些規範!

您無法連接,因爲您的套接字文件有點不對。我現在記得以前的RH有過這個問題。 您的套接字可能是/var/mysql/mysql.sock或/tmp/mysql.sock,但是一個或多個應用程序正在尋找其他應用程序。

,如果你是/tmp/mysql.sock但沒有/var/mysql/mysql.sock你應該:

cd /var 
mkdir mysql 
cd mysql 
ln -s /tmp/mysql.sock mysql.sock 

如果您有/var/mysql/mysql.sock但沒有的/ tmp/MySQL的.sock then:

cd /tmp 
ln -s /var/mysql/mysql.sock mysql.sock 

您需要權限才能進行更改。只需要sudo,如果需要的話在上面的命令之前!

另一種解決方案(容易):

創建文件,並調用phpinfo()函數;尋找'mysql.default_socket';或'pdo_mysql.default_socket'; 打開My.ini或My.cnf查找套接字值,例如socket =/tmp/mysql.sock 打開你的php.ini文件(在phpinfo()頁面也可以找到'Loaded Configuration File'),並將所有出錯的套接字位置更改爲正確的套接字位置。

另一種解決方案(簡單): DSN的PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=... 

的mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ... 

您的系統是當它涉及到安全真正可怕的,如果你託管敏感數據,我會升級到最新版本。

---- ---- UPDATE

Aaahhhh PHP 5.0和MySQL 3.23 :)

PHP 5的MySQL客戶端打包無法連接到MySQL數據庫小於4.1的版本。 從版本4.1開始,MySQL使用一種新的密碼散列方式,它與4.1之前的數據庫不兼容。您的配置所連接的服務器是3.23版本。所以你需要獲得更高版本的MySQL。對不起,但你的情況沒有其他實用的解決方案。如果我是你,我會升級整個系統並安裝最新的操作系統版本,如果我不得不使用Debian和最新的穩定版本的PHP和MySQL。

+3

我正在使用PHP而不是Java,但無論如何都要感謝! – Maxbester

+2

當然,我注意到了這些規範 - 儘管我的答案是,我將這些建議作爲評論發佈,因爲我不確定是否發佈了答案。如果我有時間閱讀該版本的MySQL的規格,我可能也會發佈一個答案;) – jammypeach

+1

嘗試更新!我的錯。 @jammypeach以我的道歉,不想侮辱你! – GTodorov

1

在Mac OSX只需重新啓動MySQL服務器

sudo /usr/local/mysql/support-files/mysql.server restart 

它爲我

2

Fortunatly這工作很適合我:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password'); 
0

我有采取了類似的問題我幾個小時才能解決。我將Mysql/Mariadb放在一個單獨的驅動器上,PHP驅動的網站在默認位置查找套接字。所以,我創建了一個符號鏈接,但我認爲SELinux不會授予此權限。所以,然後我將這些行添加到/etc/php.ini文件並且它可以工作。

pdo_mysql.default_socket = /data/mysql/mysql.sock 
mysql.default_socket = /data/mysql/mysql.sock 
mysqli.default_socket = /data/mysql/mysql.sock 
0

我使用MAMP,並有示例問題。我發現在tmp中沒有mysql.sock。因此,使用PDO或mysqli_使用此代碼

cd /tmp && ln -s /Applications/MAMP/tmp/mysql/mysql.sock 

它爲我

相關問題