2013-02-27 81 views
1

當我嘗試連接到我的數據庫時出現以下錯誤。無法連接到數據庫,連接太多

警告:mysqli的:: mysqli的()[mysqli.mysqli]:(HY000/2002):無法通過套接字 '/var/run/mysqld/mysqld.sock' 連接 到本地MySQL服務器( 2) in /homez.640/connelho/www/uea/includes/database.php第8行失敗 連接到MySQL:(2002)無法連接到本地MySQL服務器 通過套接字'/ var/run /的mysqld/mysqld.sock」(2)

我一直運行下面的連接方法之前,我做任何SQL查詢:

public static function connect() { 
    require_once("constants.php"); 
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
    if ($mysqli->connect_errno) { 
     die("Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error); 
    } 
    return $mysqli; 
} 

我始終運行任何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'來終止任何不需要的連接。 – 2013-02-27 22:00:41

回答

2

查詢後不要斷開連接!第一次查詢時只連接到數據庫一次。否則,你會嘗試連接超過需要,這是不止一次。

在尋找性能時,始終連接和斷開連接並不是一個好主意。它會禁用某些功能:基本上,您將丟失與現有連接有關的任何內容,例如重新使用預準備語句,或在隨後的查詢中訪問LAST_INSERT_ID()。保持連接的活力對此非常重要。

但是,您的問題通常源於濫用持續連接,但在這裏我看不到任何此類內容。

1

好的我一直非常愚蠢。我無法連接到另一個晚上的服務器,所以我將我在connect方法中使用的常量切換到localhost,然後第二天就忘記了......難怪我無法連接!什麼是扳手哈哈。不知道爲什麼我不能連接另一個夜晚,但我現在可以。對不起,浪費人們的時間