![](/img/trans.png)
[英]Mysql with docker: Can't connect to local MySQL server through socket
[英]Can't connect to local MySQL server through socket
當我上傳或提交頁面時,我的網站出現以下錯誤:
mysql_real_escape_string() [function.mysql-real-escape-string]: 無法通過socket '/var/lib/mysql/mysql.sock' 連接到本地MySQL服務器(2)
這到底是什么意思?
由於錯誤是由調用mysql_real_escape_string()
引發的,這意味着您沒有先調用mysql_connect()
並將有效的數據庫句柄傳遞給mysql_real_escape_string
(或調用mysql_connect()
失敗)。
在某些情況下,mysql 擴展將嘗試使用 php.ini 中的默認設置自動連接,如果這些設置不可用,則故障轉移到 my.cnf - 這顯然是無效的。 或者可能是設置有效但 mysqld 沒有運行。
你有成功連接到數據庫的腳本嗎?
你有數據庫的用戶名和密碼嗎?
嘗試:
check_running();
$user=''; // fill in your details
$password=''; // fill in your details
$hosts=array(
'localhost', '127.0.0.1', $_SERVER['HTTP_HOST'], $_SERVER['SERVER_ADDR']
);
foreach ($hosts as $addr) {
try_con($addr, $user, $password);
try_con($addr . ':3306', $user, $password);
}
function try_con($host, $user, $password)
{
$dbh=mysql_connect($host, $user, $password);
if ($dbh) {
print "Connected OK with $host, $user, $password<br />\n";
} else {
print "Failed with $host, $user, $password<br />\n";
}
}
function check_running()
{
// this assumes that you are using Apache on a Unix/Linux box
$chk=`ps -ef | grep httpd | grep -v grep`;
if ($chk) {
print "Checking for mysqld process: " . `ps -ef | grep mysqld | grep -v grep` . "<br />\n";
} else {
print "Cannot check mysqld process<br />\n";
}
}
是的,有些服務器在連接之前使用 mysql 函數時傳遞默認連接參數並拋出錯誤,其他一些服務器在您放置代碼的任何地方都可以正常工作,在建立 mysql_connect() 連接后放置 mysql_real_escape_string() 總是更安全
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.