2013-02-27 4 views
1

데이터베이스에 연결하려고하면 다음과 같은 오류가 발생합니다.데이터베이스에 연결할 수 없습니다. 연결이 너무 많습니다.

경고 : mysqli :: mysqli() [mysqli.mysqli] : (/ 2002 HY000가) : 소켓 '/var/run/mysqld/mysqld.sock'을 통해 지역의 MySQL 서버에 를 연결할 수 없습니다 (2) in /homez.640/connelho/www/uea/includes/database.php on line 8 MySQL에 연결하지 못했습니다 : (2002) 로컬 MySQL 서버 에 '/ var/run/mysqld를/mysqld.sock '(2)

내가 어떤 SQL 쿼리하기 전에 항상 다음과 같은 연결 방법을 실행

난 항상 모든 SQL 쿼리 후 다음과 같은 분리 방법을 실행

public static function disconnect($mysqli = NULL, $stmt = NULL) { 
    if (isset($mysqli)) { 
     $mysqli->close(); 
    } 
    if (isset($stmt)) { 
     $stmt->close(); 
    } 
} 

내가 https://stackoverflow.com/a/2499660 쳐다 보면서 내 호스팅 제공 업체를 이메일로 전송하고 내 스크립트를 확인하라고 한 한을 "우리는 같은 30 개 MySQL의 연결이 제한 - 우리는 이것을 조정할 수 없으며 스크립트가 제대로 실행되면 왜 발생해야하는지에 대한 이유가 없습니다. " 몇 주 동안 잘 작동하여 갑자기 연결이 끊어졌습니다. 나는이 사이트의 유일한 방문객이다. 내 데이터베이스 클래스를 연결하는 방법과 연결을 해제

예 :

public static function county_select() { 
    //connect to database 
    $mysqli = Database::connect(); 

    //write sql statement 
    $sql = "SELECT id, county FROM Counties ORDER BY country, county ASC"; 

    //prepared statement, stage 1: prepare 
    if (!($stmt = $mysqli->prepare($sql))) { 
     die("Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error); 
    } 

    //prepared statement, stage 2: execute 
    if (!$stmt->execute()) { 
     die("Execute failed: (" . $stmt->errno . ") " . $stmt->error); 
    } 

    //prepared statement, stage 3: bind result 
    if (!$stmt->bind_result($id, $county)) { 
     die("Binding result failed: (" . $stmt->errno . ") " . $stmt->error); 
    } 
    $counties = array(); 
    //prepared statement, stage 5: fetch  
    while ($stmt->fetch()) { 
     $counties[] = array("id" => $id, "county" => $county); 
    } 
    //disconnect from database 
    Database::disconnect($mysqli, $stmt); 

    return $counties; 
} 

지금은 하루 동안 내 사이트에 연결할 수 없었다. 연결이 만료 될 때까지 얼마나 걸립니까? 어떻게 수동으로 연결을 끊습니까? PHP는 요청이 끝날 때 자동으로 데이터베이스 커넥션을 닫습니다.

+4

'show processlist;'는 mysql 모니터에 모든 활성 연결을 보여줍니다. 원치 않는 연결을 종료하려면'kill '을 사용할 수 있습니다. –

답변

2

쿼리 후 연결을 끊지 마십시오! 첫 번째 쿼리가 발생할 때 데이터베이스에 한 번만 연결하십시오. 그렇지 않으면 두 번 이상 필요 이상으로 연결을 시도합니다.

성능을 검색 할 때는 항상 연결 및 분리하는 것이 좋지 않습니다. 특정 기능을 사용하지 않도록 설정합니다. 기본적으로 미리 준비된 문을 다시 사용하거나 후속 쿼리에서 LAST_INSERT_ID()에 액세스하는 것과 같은 기존 연결과 관련된 항목은 손실됩니다. 연결을 유지하는 것이 중요합니다.

하지만 문제는 일반적으로 영구 연결을 남용하는 데서 발생하지만 여기에서는 이와 같은 내용을 볼 수 없습니다.

1

나는 믿을 수 없을 정도로 어리 석다. 나는 다른 방법으로 서버에 연결할 수 없었기 때문에 connect 메소드에서 localhost로 사용한 상수를 바꾼 다음 다음 날을 잊어 버렸습니다 ... 연결하지 못했습니다. 스패너가 얼마나 하하. 왜 내가 다른 밤을 연결할 수 없었는지 모르겠지만 지금은 할 수 있습니다. 사람들의 시간을 낭비하게해서 죄송합니다.

관련 문제