无法通过套接字连接到本地MySQL服务器

时间:2010-02-02 09:19:51

标签: mysql sockets

当我上传或提交页面时,我的网站上出现以下错误:

  

mysql_real_escape_string()[function.mysql-real-escape-string]:无法通过套接字'/var/lib/mysql/mysql.sock'连接到本地MySQL服务器(2)

这是什么意思?

2 个答案:

答案 0 :(得分:13)

由于调用mysql_real_escape_string()会引发错误,因此它意味着您没有先调用mysql_connect()并将有效的db句柄传递给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";
   }
 }

HTH

下进行。

答案 1 :(得分:2)

是的,有些服务器在连接之前使用mysql函数时传递默认连接参数并抛出错误,其他一些服务器在您放置代码的任何地方都可以正常工作 在建立mysql_connect()连接之后放置mysql_real_escape_string()总是更安全