Signatur
Beschreibung
cubrid_unbuffered_query() sendet eine SQL-Abfrage an den CUBRID-Datenbankserver und gibt sofort einen Ergebnis-Handle zurück, ohne alle Zeilen vorab in den PHP-Speicher zu laden. Dies ist besonders bei großen Ergebnismengen nützlich, da der Speicherbedarf deutlich reduziert wird: Zeilen werden erst dann vom Server abgerufen, wenn sie tatsächlich gelesen werden.
Im Gegensatz zur gepufferten Variante cubrid_query() können bei ungepufferten Abfragen keine Funktionen verwendet werden, die die Gesamtanzahl der Zeilen benötigen (z. B. cubrid_num_rows()), bis alle Zeilen abgerufen wurden. Außerdem muss das Ergebnis vollständig durchiteriert oder mit cubrid_free_result() freigegeben werden, bevor eine neue Abfrage auf derselben Verbindung ausgeführt werden kann.
Die Funktion eignet sich ideal für SELECT-Abfragen, die sehr viele Datensätze zurückliefern, und für Szenarien, in denen der verfügbare PHP-Arbeitsspeicher begrenzt ist. Für INSERT-, UPDATE- oder DELETE-Abfragen bietet die ungepufferte Variante keinen wesentlichen Vorteil.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $query Pflicht | string | Die auszuführende SQL-Abfrage als Zeichenkette. Typischerweise eine SELECT-Anweisung. |
|
| $conn_identifier | resource | null | Die CUBRID-Verbindungskennung, die von cubrid_connect() oder cubrid_connect_with_url() zurückgegeben wurde. Wird dieser Parameter weggelassen, wird die zuletzt geöffnete Verbindung verwendet. |
Rückgabewert
resource), das mit den üblichen Fetch-Funktionen wie cubrid_fetch() oder cubrid_fetch_assoc() verarbeitet werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Große Ergebnismenge speicherschonend verarbeiten
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . cubrid_error());
}
$result = cubrid_unbuffered_query('SELECT id, name, email FROM users ORDER BY id', $conn);
if ($result === false) {
die('Abfrage fehlgeschlagen: ' . cubrid_error($conn));
}
while ($row = cubrid_fetch_assoc($result)) {
echo $row['id'] . ' - ' . $row['name'] . ' (' . $row['email'] . ')' . PHP_EOL;
}
cubrid_free_result($result);
cubrid_disconnect($conn);
Ungepufferte Abfrage mit Fehlerbehandlung und Zeilenverarbeitung
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$sql = "SELECT product_id, product_name, price FROM products WHERE price > 100";
$result = cubrid_unbuffered_query($sql, $conn);
if (!$result) {
echo 'Fehler: ' . cubrid_error($conn);
cubrid_disconnect($conn);
exit;
}
$count = 0;
while ($row = cubrid_fetch_row($result)) {
// Zeile direkt verarbeiten, ohne alle im Speicher zu halten
printf("Produkt #%d: %s — %.2f EUR\n", $row[0], $row[1], $row[2]);
$count++;
}
echo "Insgesamt verarbeitet: $count Zeilen\n";
cubrid_free_result($result);
cubrid_disconnect($conn);
// Wichtig · Fallstricke
Wichtige Einschränkungen: Funktionen wie cubrid_num_rows() liefern bei ungepufferten Ergebnissen möglicherweise keine korrekten Werte, solange nicht alle Zeilen abgerufen wurden. Plane daher keine Logik ein, die auf der Gesamtzeilenzahl vor dem vollständigen Durchlaufen basiert.
Verbindungssperre: Solange ein ungepuffertes Ergebnis nicht vollständig gelesen oder mit cubrid_free_result() freigegeben wurde, kann auf derselben Verbindung keine weitere Abfrage ausgeführt werden. Bei Bedarf an parallelen Abfragen sollte eine separate Verbindung geöffnet werden.
Sicherheit: SQL-Injection vermeiden — Benutzereingaben niemals direkt in die Abfragezeichenkette einbauen. Stattdessen vorbereitete Anweisungen über cubrid_prepare() verwenden.