Fondamentalement, dans le pseudo-code, je cherche quelque chose comme
if (connected_to_any_database()) {
// do nothing
}
else {
mysql_connect(...)
}
Comment puis-je mettre en œuvre
connected_to_any_database()
Avez-vous essayé mysql_ping ()?
Vérifie si la connexion au serveur fonctionne ou non. S'il s'est arrêté, une reconnexion automatique est tentée.
Alternativement, une seconde approche (moins fiable) serait:
$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
//try to reconnect
}
Update: À partir de PHP 5.5, utilisez plutôt mysqli_ping ().
Essayez d'utiliser la fonction mysql_ping de PHP:
echo @mysql_ping() ? 'true' : 'false';
Vous aurez besoin de préfixer le "@" pour supposer les avertissements MySQL que vous obtiendrez pour exécuter cette fonction sans être connecté à une base de données.
Il y a aussi d'autres moyens, mais cela dépend du code que vous utilisez.
avant ... (je veux dire quelque part dans un autre fichier que vous n'êtes pas sûr d'avoir inclus)
$db = mysql_connect()
plus tard...
if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
Le Baron Schwartz a écrit sur son blog qu'en raison des conditions de concurrence, cette "vérification avant écriture" est une mauvaise pratique. Il préconise un schéma try/catch avec un reconnect
dans le catch. Voici le pseudo-code qu'il recommande:
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
Voici son blog complet: https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/