2011-09-05 118 views
0

我的服務器是centos(CentOS 5.6版(Final))。php,mysqli問題

我有一個mysqli奇怪的問題。 mysqli連接僅適用於命令行腳本,不適用於網頁腳本。

我已經fiollowing代碼我的PHP腳本test.php的內部:

$connection = mysqli_init(); 

mysqli_real_connect($connection,$host,$user,$pass,$database); 
var_dump(mysqli_connect_errno(), mysqli_connect_error()); 

所以當命令行下文件來運行,這是確定的,但在網頁, 它返回錯誤代碼「2003」, 和錯誤消息無法連接到MySQL服務器上XXXXXX

Linux版本是2.6.18-238.19.1.el5xen#1 SMP週五7月15日8點16分59秒 EDT 2011 x86_64的x86_64的x86_64的GNU/Linux的

+0

你如何通過'localhost'或IP /主機名連接到MySQL?另外,是否啓用了「skip-network」? –

+0

不同服務器上的mysql服務器,還有,mysql -u xxx -pxxxx -hxxx工作。 – anru

回答

1

這是ju一種「直覺」的猜測;坦率地說,你沒有提供足夠的信息來實際工作。

我的猜測是你連接到「本地主機」作爲你的主機名。在Linux中,這將嘗試使用unix(基於文件的)套接字。當您從命令行運行時,您可能以不同於從Web服務器運行它的用戶身份運行。

我猜你的Web服務器用戶(WWW數據或Apache或其他)可能沒有訪問套接字文件的權限。嘗試從「本地主機」更改爲「127.0.0.1」(是的,他們被區別對待),看看你能否連接。

+0

我不是使用本地主機,而是一個真正的遠程主機。我發現,如果我使用$ conn = new mysqli($ host,$ user,$ pass,$ db);有效。 – anru

0

哦,centos使用Selinux,它不允許apache默認連接到遠程主機。 這就是爲什麼它不能在網頁中工作。

改變了selinux設置,它現在工作。