基本上在伪代码中我正在寻找像
这样的东西if (connected_to_any_database()) {
// do nothing
}
else {
mysql_connect(...)
}
如何实施
connected_to_any_database()
答案 0 :(得分:46)
您是否尝试过 mysql_ping() ?
检查与服务器的连接是否正常。如果它已经关闭,则尝试自动重新连接。
或者,第二种(不太可靠)的方法是:
$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
//try to reconnect
}
更新:从PHP 5.5起,请改用 mysqli_ping() 。
答案 1 :(得分:19)
尝试使用PHP的mysql_ping函数:
echo @mysql_ping() ? 'true' : 'false';
你需要在前面添加“@”来假设你运行这个函数时得到的MySQL警告,而不是连接到数据库。
还有其他方法,但这取决于您正在使用的代码。
答案 2 :(得分:3)
答案 3 :(得分:2)
之前......(我的意思是在某个其他档案中的某个地方,你不确定你是否包括在内)
$db = mysql_connect()
...后
if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
答案 4 :(得分:1)
Baron Schwartz博客指出,由于竞争条件的影响,这在写作之前会检查'是一种不好的做法。他主张在catch中使用reconnect
的try / catch模式。这是他推荐的伪代码:
function query_database(connection, sql, retries=1)
while true
try
result=connection.execute(sql)
return result
catch InactiveConnectionException e
if retries > 0 then
retries = retries - 1
connection.reconnect()
else
throw e
end
end
end
end
以下是他的完整博客:https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/
答案 5 :(得分:-2)
// Earlier in your code
mysql_connect();
set_a_flag_that_db_is_connected();
// Later....
if (flag_is_set())
mysql_connect(....);