4

MySQL を使用する Web サイトがいくつかあります。私は SQL の専門家ではないので、単純な接続、クエリなどを使用します。データベース サーバーのみがハングすることも (まれに発生します)、自宅でテストしている mysql を有効にするのを忘れたこともあります。再び操作できるようになるまで、サーバーは接続しようとしてハングし、最終的にタイムアウト エラーが発生します。

この「ping」機能のようなデータベースサーバーの以前のテストを追加しようとしています:

function pingDomain($domain){
    $starttime = microtime(true);
    $file = fsockopen ($domain, 80, $errno, $errstr, 10);
    $stoptime = microtime(true);
    $status = 0;

    if (!$file) {
        $status = -1; // Site is down
    } else {
        fclose($file);
        $status = ($stoptime - $starttime) * 1000;
        $status = floor($status);
    }

    return $status;
}

しかし、どちらも機能しませんでした.phpはとにかくハングします。何か案は?

4

2 に答える 2

1

シンプルな使用 mysql_ping:

            <?php
            set_time_limit(0);

            $conn = mysql_connect('localhost', 'mysqluser', 'mypass');
            $db   = mysql_select_db('mydb');

            /* Assuming this query will take a long time */
            $result = mysql_query($sql);
            if (!$result) {
                echo 'Query #1 failed, exiting.';
                exit;
            }

            /* Make sure the connection is still alive, if not, try to reconnect */
            if (!mysql_ping($conn)) {
                echo 'Lost connection, exiting after query #1';
                exit;
            }
            mysql_free_result($result);

            /* So the connection is still alive, let's run another query */
            $result2 = mysql_query($sql2);
            ?>

あなたはこれを見たいと思うかもしれません:

mysql_ping

于 2012-09-26T19:34:25.927 に答える
0

mySQL サーバーに関する信頼性の高い簡単なテストに関するドキュメントはどこにもありません。現在、次の手法を使用しています。

@$this->Base = mysqli_init();
@$this->Base->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);
@$this->Base->real_connect($host, $usuario, $senha, $bd);

$this->Base->connect_error または $this->Base->connect_errno でエラーをキャッチするよりも、"@" 記号のために書き込まれません。

手続き型も使用できます。

$Link = mysqli_init();
mysqli_options($Link, MYSQLI_OPT_CONNECT_TIMEOUT, 1);
$res = @mysqli_real_connect($host, $usuario, $senha, $bd);
if($res) {
    $E->echop("Connected!!!");
} else {
    $E->echop("Huston, we got a problem...");
}

コメントやその他の回答は大歓迎です!

于 2013-10-17T23:01:50.817 に答える