我有一個非常簡單的測試腳本:PDO連接從命令行運行,但不通過Apache?
<?php
$DSN = "mysql:host=db.example.edu;port=3306;dbname=search_data";
try {
$DB = new PDO($DSN, "username", "super-secret-password!");
} catch (PDOException $e) {
header('Content-Type: text/plain');
print "Could not connect to database, rawr. :-(";
exit;
}
$SQL = "SELECT phrase FROM search ORDER BY RAND() LIMIT 10";
foreach($DB->query($SQL) as $row){
print $row['phrase']."\n";
}
?>
當我執行命令行這個腳本,它完美的作品:
$ php test.php
corporal punishment
Stretches
voluntary agencies and the resettlement of refugees
music and learning
Nike Tiger Woods Scandal
Hermeneia
PSYCHINFO
anthony bourdain
Black-White Couples and their Social Worlds
colonization, hodge
但是當我通過網絡瀏覽器訪問完全相同的腳本,它說:
Could not connect to database, rawr. :-(
我的錯誤嘗試var_dump
,消息是:「SQLSTATE [HY000] [2003]無法連接到MySQL服務器' db.example.edu'(13)「。
這是令人費解的。它是完全相同的服務器上的完全相同的腳本 - 爲什麼當我從命令行執行它時會工作,但在Apache執行它時會失敗?
這是Linux服務器嗎?運行SELinux的是Red Hat還是CentOS?如果是這樣,您可能需要啓用SELinux布爾型'httpd_can_network_connect'和'httpd_can_network_connect_db'以允許Apache建立到遠程數據庫主機的連接。 –
有關此錯誤的更多信息(13 =權限被拒絕)在此處:http://www.filonov.com/blog/2009/08/07/sqlstatehy000-2003-cant-connect-to-mysql-server-on-xxx -xxx-xxx-xxx-13/ – thetaiko
@Michael是的,它是一個RHEL 6.1服務器,並且是一個閃亮的新服務器。另外,@thetaiko - 工作!這是SELinux阻止連接,並以root身份運行'setsebool -P httpd_can_network_connect = 1'來修復它。如果你想發佈這個答案,我會很樂意接受和贊成。 –