Start · Sprachen · PHP · Referenz · cubrid_ping

cubrid_ping

Funktion

Prüft, ob eine CUBRID-Datenbankverbindung noch aktiv ist, und versucht bei Bedarf, sie neu herzustellen.

seit PHP 8.3.1 Kategorie: db

Signatur

cubrid_ping(resource $conn_identifier = ?): bool

Beschreibung

cubrid_ping() testet, ob eine bestehende CUBRID-Serververbindung noch funktionsfähig ist. Dies ist nützlich in langlaufenden Skripten oder nach langen Pausen zwischen Datenbankoperationen, bei denen der Server die Verbindung möglicherweise getrennt hat (z. B. durch einen Timeout).

Die Funktion sendet einen einfachen Ping an den CUBRID-Server. Erhält sie eine Antwort, gibt sie true zurück. Falls die Verbindung unterbrochen wurde, versucht sie automatisch, die Verbindung wiederherzustellen. Ist auch das nicht möglich, gibt sie false zurück.

Besonders in persistenten Verbindungsszenarien oder in Daemon-Prozessen sollte vor dem Ausführen von Abfragen zunächst cubrid_ping() aufgerufen werden, um sicherzustellen, dass die Verbindung tatsächlich verfügbar ist.

Wird kein Verbindungsbezeichner ($conn_identifier) übergeben, wird die zuletzt geöffnete CUBRID-Verbindung verwendet.

Parameter

Name Typ Default Beschreibung
$conn_identifier resource Die CUBRID-Verbindungsressource, die mit cubrid_connect() oder cubrid_connect_with_url() erstellt wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung zum CUBRID-Server erfolgreich geprüft oder wiederhergestellt wurde. Gibt false zurück, wenn die Verbindung nicht mehr besteht und auch nicht wiederhergestellt werden konnte.

Beispiele

Grundlegende Verbindungsprüfung vor einer Abfrage

<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');

if (!$conn) {
    die('Verbindung fehlgeschlagen.');
}

// Simulierte Pause (z. B. in einem langlaufenden Skript)
sleep(5);

// Verbindung prüfen, bevor eine Abfrage ausgeführt wird
if (cubrid_ping($conn)) {
    echo "Verbindung ist aktiv." . PHP_EOL;
    $result = cubrid_execute($conn, 'SELECT * FROM nation LIMIT 5');
    // Ergebnis verarbeiten ...
    cubrid_close_request($result);
} else {
    echo "Verbindung unterbrochen – bitte neu verbinden." . PHP_EOL;
}

cubrid_disconnect($conn);
?>
Verbindung ist aktiv.

Wiederverbindungslogik mit cubrid_ping in einem Daemon

<?php
function get_active_connection(string $host, int $port, string $db, string $user, string $pw): resource|false {
    static $conn = null;

    if ($conn === null || !cubrid_ping($conn)) {
        // Verbindung neu herstellen
        if ($conn !== null) {
            @cubrid_disconnect($conn);
        }
        $conn = cubrid_connect($host, $port, $db, $user, $pw);
        if (!$conn) {
            error_log('CUBRID-Verbindung konnte nicht hergestellt werden.');
            return false;
        }
        echo "Neue Verbindung hergestellt." . PHP_EOL;
    } else {
        echo "Bestehende Verbindung wiederverwendet." . PHP_EOL;
    }

    return $conn;
}

$conn = get_active_connection('localhost', 33000, 'demodb', 'dba', '');
if ($conn) {
    // Datenbankoperationen ausführen
    $result = cubrid_execute($conn, 'SELECT count(*) FROM nation');
    $row = cubrid_fetch($result);
    echo "Anzahl Nationen: " . $row[0] . PHP_EOL;
    cubrid_close_request($result);
    cubrid_disconnect($conn);
}
?>
Neue Verbindung hergestellt. Anzahl Nationen: 215

// Wichtig · Fallstricke

Hinweis zur Verfügbarkeit: cubrid_ping() ist nur verfügbar, wenn die CUBRID-PHP-Erweiterung installiert und aktiviert ist. Diese ist standardmäßig nicht in PHP enthalten und muss separat über PECL oder den CUBRID-Treiber installiert werden.

Persistente Verbindungen: Bei Verwendung von cubrid_pconnect() ist es besonders ratsam, cubrid_ping() zu verwenden, da persistente Verbindungen vom Server getrennt werden können, ohne dass der Client dies unmittelbar bemerkt.

Fehlerbehandlung: Selbst wenn cubrid_ping() true zurückgibt, können nachfolgende Abfragen fehlschlagen. Die Rückgabe ist daher als Indikator, nicht als absolute Garantie zu verstehen.