web-dev-qa-db-de.com

Wie überprüfe ich ob PHP ist bereits mit einer Datenbank verbunden?

Grundsätzlich suche ich im Pseudo-Code so etwas

if (connected_to_any_database()) {
    // do nothing
}
else {
    mysql_connect(...)
}

Wie mache ich das?

connected_to_any_database()
36
deltanovember

Haben Sie mysql_ping () ausprobiert?

Überprüft, ob die Verbindung zum Server funktioniert oder nicht. Wenn die Verbindung unterbrochen wurde, wird eine automatische Wiederverbindung versucht.

Alternativ wäre ein zweiter (weniger zuverlässiger) Ansatz:

$link = mysql_connect('localhost','username','password');
//(...)
if($link == false){
    //try to reconnect
}

Update: Ab PHP 5.5 verwenden Sie stattdessen mysqli_ping ().

44
mailo

Versuchen Sie es mit PHPs mysql_ping function:

echo @mysql_ping() ? 'true' : 'false';

Sie müssen das "@" voranstellen, um die MySQL-Warnungen anzunehmen, die Sie erhalten, wenn Sie diese Funktion ausführen, ohne mit einer Datenbank verbunden zu sein.

Es gibt auch andere Möglichkeiten, aber dies hängt vom verwendeten Code ab.

18
McHerbie
3
azat

vor ... (Ich meine, irgendwo in einer anderen Datei sind Sie sich nicht sicher, ob Sie eingeschlossen wurden.)

$db = mysql_connect()

später...

if (is_resource($db)) {
// connected
} else {
$db = mysql_connect();
}
2
Capsule

Baron Schwartz bloggt, dass dieses 'check before write' aufgrund der Rennbedingungen eine schlechte Praxis ist. Er befürwortet ein Try/Catch-Muster mit einer reconnect im Catch. Hier ist der Pseudo-Code, den er empfiehlt:

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

Hier ist sein kompletter Blog: https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/

0
ergohack