Start · Sprachen · PHP · Referenz · cubrid_set_query_timeout

cubrid_set_query_timeout

Funktion

Setzt das Timeout (in Millisekunden) für die Ausführung einer CUBRID-Datenbankabfrage.

seit PHP 8.4.0 Kategorie: db

Signatur

cubrid_set_query_timeout(resource $req_identifier, int $timeout): bool

Beschreibung

cubrid_set_query_timeout definiert eine maximale Ausführungszeit für eine bestimmte CUBRID-Abfrage. Der Timeout-Wert wird in Millisekunden angegeben. Überschreitet die Ausführung der Abfrage diesen Wert, wird sie automatisch abgebrochen.

Diese Funktion ist besonders nützlich, um lang laufende Abfragen zu begrenzen und so die Verfügbarkeit und Stabilität einer Anwendung sicherzustellen. Sie verhindert, dass einzelne Abfragen die gesamte Anwendung blockieren oder Datenbankressourcen dauerhaft belegen.

Der Timeout gilt für den übergebenen Request-Handle ($req_identifier), der typischerweise durch Funktionen wie cubrid_prepare oder cubrid_execute erzeugt wird. Ein Timeout-Wert von 0 deaktiviert das Timeout, d. h. die Abfrage kann unbegrenzt lange laufen.

Beachte, dass der Timeout nur für die Ausführungsphase der Abfrage gilt und nicht für die Zeit, die für das Abrufen der Ergebnisse benötigt wird.

Parameter

Name Typ Default Beschreibung
$req_identifier Pflicht resource Der Request-Handle der CUBRID-Abfrage, für den der Timeout gesetzt werden soll. Wird typischerweise durch cubrid_prepare() oder cubrid_execute() zurückgegeben.
$timeout Pflicht int Der maximale Timeout-Wert in Millisekunden für die Abfrageausführung. Der Wert 0 deaktiviert das Timeout (unbegrenzte Ausführungszeit).

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Timeout erfolgreich gesetzt wurde, andernfalls false.

Beispiele

Timeout für eine vorbereitete Abfrage setzen

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

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

$req = cubrid_prepare($conn, 'SELECT * FROM large_table WHERE status = ?');

if (!$req) {
    die('Prepare fehlgeschlagen: ' . cubrid_error($conn));
}

// Timeout auf 5000 Millisekunden (5 Sekunden) setzen
$result = cubrid_set_query_timeout($req, 5000);

if ($result) {
    echo 'Timeout erfolgreich gesetzt.' . PHP_EOL;
} else {
    echo 'Timeout konnte nicht gesetzt werden.' . PHP_EOL;
}

cubrid_bind($req, 1, 'active', 'STRING');
cubrid_execute($req);

while ($row = cubrid_fetch_assoc($req)) {
    echo $row['id'] . ': ' . $row['name'] . PHP_EOL;
}

cubrid_close_request($req);
cubrid_disconnect($conn);
Timeout erfolgreich gesetzt.

Timeout deaktivieren (unbegrenzte Ausführungszeit)

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

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

$req = cubrid_prepare($conn, 'SELECT COUNT(*) AS total FROM very_large_table');

if (!$req) {
    die('Prepare fehlgeschlagen: ' . cubrid_error($conn));
}

// Timeout deaktivieren: Wert 0 bedeutet kein Timeout
$result = cubrid_set_query_timeout($req, 0);

if ($result) {
    echo 'Timeout erfolgreich deaktiviert. Abfrage kann unbegrenzt laufen.' . PHP_EOL;
}

cubrid_execute($req);
$row = cubrid_fetch_assoc($req);
echo 'Gesamtanzahl: ' . $row['total'] . PHP_EOL;

cubrid_close_request($req);
cubrid_disconnect($conn);
Timeout erfolgreich deaktiviert. Abfrage kann unbegrenzt laufen. Gesamtanzahl: 1500000

// Wichtig · Fallstricke

Achtung: Der Timeout gilt nur für die Ausführungsphase der Abfrage (Query Execution), nicht für das Abrufen von Ergebnissen (Fetch-Operationen). Lang laufende Fetch-Schleifen werden vom gesetzten Timeout nicht begrenzt.

Ein zu niedrig gesetzter Timeout-Wert kann dazu führen, dass legitime, aber aufwendige Abfragen unerwartet abgebrochen werden. Wähle den Timeout-Wert sorgfältig entsprechend der erwarteten Abfragezeit.

Die Funktion ist spezifisch für die CUBRID-Datenbankerweiterung und steht nur zur Verfügung, wenn PHP mit der CUBRID-Erweiterung kompiliert oder diese als Extension geladen wurde.