0

データベースに接続しようとすると、次のエラーが発生します。

警告: mysqli::mysqli() [mysqli.mysqli]: (HY000/2002): /homez.640 のソケット '/var/run/mysqld/mysqld.sock' (2) を介してローカル MySQL サーバーに接続できません/connelho/www/uea/includes/database.php 行 8 MySQL への接続に失敗しました: (2002) ソケット '/var/run/mysqld/mysqld.sock' を介してローカル MySQL サーバーに接続できません (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を見て、ホスティング プロバイダーにメールを送信したところ、スクリプトを確認するように言われました。スクリプトが適切に実行された場合に発生するはずです。」数週間は問題なく動作していましたが、突然接続できなくなりました。私はサイトの唯一の訪問者です。

データベース クラスの接続と切断の例:

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;
}

今日から 1 日、自分のサイトに接続できません。接続の有効期限が切れるまでどのくらいかかりますか? それらを手動で切断するにはどうすればよいですか? リクエストの最後にPHPがデータベース接続を自動的に閉じると思いましたか?

4

2 に答える 2

2

クエリの後で切断しないでください。最初のクエリが発生したときに 1 回だけデータベースに接続します。そうしないと、必要以上に、つまり複数回接続しようとすることになります。

パフォーマンスを求める場合、常に接続と切断を行うことはあまり良い考えではありません。また、特定の機能が無効になります。基本的に、準備されたステートメントの再利用や、後続のクエリでの LAST_INSERT_ID() へのアクセスなど、既存の接続に関連するものはすべて失われます。これには、接続を維持することが重要です。

しかし、あなたの問題は通常、永続的な接続を悪用することから生じますが、ここではそのようなものは見られません.

于 2013-02-27T23:55:00.413 に答える
1

OK、私は信じられないほど愚かでした。先日、サーバーに接続できなかったので、connect メソッドで使用した定数を localhost に切り替え、次の日には忘れていました... 接続できなかったのも不思議ではありません! なんてスパナハハ。先日接続できなかった理由はわかりませんが、今は接続できます。人の時間を無駄にしてごめんなさい

于 2013-03-03T19:09:02.743 に答える