web-dev-qa-db-fra.com

Comment puis-je vérifier si PHP est déjà connecté à une base de données?

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()
36
deltanovember

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 ().

44
mailo

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.

18
McHerbie
3
azat

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();
}
2
Capsule

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/

0
ergohack