Signatur
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
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 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);
// 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.