4

我有一些使用 MySQL 的网站。我不是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 回答