我有一些使用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还是挂了。有什么想法吗?
答案 0 :(得分: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);
?>
您可能想看看这个:
答案 1 :(得分:0)
无法找到有关mySQL服务器可靠而简单的测试的文档。我现在使用以下技术:
@$this->Base = mysqli_init();
@$this->Base->options(MYSQLI_OPT_CONNECT_TIMEOUT, 1);
@$this->Base->real_connect($host, $usuario, $senha, $bd);
比你用$ this-&gt; Base-&gt; connect_error或$ this-&gt; Base-&gt; 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...");
}
欢迎评论和其他答案!