Start · Sprachen · PHP · Referenz · ocifetchstatement

ocifetchstatement

Funktion

Veralteter Alias von <code>oci_fetch_all()</code> — ruft alle Zeilen eines Oracle-Abfrageergebnisses auf einmal ab.

seit PHP 5.0.0 Kategorie: db

Signatur

ocifetchstatement(resource $statement, array &$output, int $skip = 0, int $maxrows = -1, int $flags = OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC): int

Beschreibung

ocifetchstatement() ist ein veralteter Alias der Funktion oci_fetch_all(). Er liest alle Zeilen eines Oracle-Abfrageergebnisses (OCI8-Statement) in ein zweidimensionales Array ein. Das Ziel-Array wird dabei als Referenz übergeben und durch die Funktion befüllt.

Die Funktion gibt die Anzahl der abgerufenen Zeilen zurück. Über die Parameter $skip und $maxrows lässt sich steuern, wie viele Zeilen übersprungen bzw. maximal geholt werden. Der Parameter $flags bestimmt das Format des Ausgabe-Arrays: spaltenorientiert (OCI_FETCHSTATEMENT_BY_COLUMN) oder zeilenorientiert (OCI_FETCHSTATEMENT_BY_ROW) sowie assoziativ (OCI_ASSOC) oder numerisch (OCI_NUM).

Da ocifetchstatement() lediglich ein Alias ist, sollte in modernem Code stets oci_fetch_all() verwendet werden. Aliase dieser Art existieren aus Kompatibilitätsgründen zu älteren PHP-Versionen und können in zukünftigen PHP-Versionen entfernt werden.

Parameter

Name Typ Default Beschreibung
$statement Pflicht resource Ein gültiges OCI8-Statement-Handle, das durch oci_parse() und oci_execute() vorbereitet und ausgeführt wurde.
$output Pflicht array Das Array, in das die Ergebniszeilen geschrieben werden. Wird als Referenz übergeben und von der Funktion befüllt.
$skip int 0 Anzahl der Zeilen, die am Anfang des Ergebnisses übersprungen werden sollen.
$maxrows int -1 Maximale Anzahl der abzurufenden Zeilen. -1 bedeutet, dass alle verbleibenden Zeilen geholt werden.
$flags int OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC Kombinierbare Flags zur Steuerung der Array-Struktur: OCI_FETCHSTATEMENT_BY_COLUMN (Standard) oder OCI_FETCHSTATEMENT_BY_ROW und OCI_ASSOC (Standard) oder OCI_NUM.

Rückgabewert

Typ
int
Beschreibung
Gibt die Anzahl der in das $output-Array geschriebenen Zeilen zurück. Bei einem leeren Ergebnis wird 0 zurückgegeben.

Beispiele

Alle Zeilen einer Oracle-Abfrage abrufen

<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$sql = 'SELECT mitarbeiter_id, nachname FROM mitarbeiter WHERE abteilung_id = :abt';
$stmt = oci_parse($conn, $sql);
oci_bind_by_name($stmt, ':abt', $abt_id);
$abt_id = 10;
oci_execute($stmt);

$rows = [];
$anzahl = ocifetchstatement($stmt, $rows);

echo "Abgerufene Zeilen: $anzahl\n";
foreach ($rows['NACHNAME'] as $i => $nachname) {
    echo $rows['MITARBEITER_ID'][$i] . ': ' . $nachname . "\n";
}

oci_free_statement($stmt);
oci_close($conn);
Abgerufene Zeilen: 3 101: Müller 102: Schmidt 103: Weber

Zeilenorientiertes Array mit numerischen Schlüsseln

<?php
$conn = oci_connect('benutzer', 'passwort', 'localhost/XE');
$stmt = oci_parse($conn, 'SELECT produkt_id, bezeichnung FROM produkte');
oci_execute($stmt);

$rows = [];
$anzahl = ocifetchstatement(
    $stmt,
    $rows,
    0,
    5,
    OCI_FETCHSTATEMENT_BY_ROW | OCI_ASSOC
);

echo "Erste 5 Produkte:\n";
foreach ($rows as $zeile) {
    echo $zeile['PRODUKT_ID'] . ': ' . $zeile['BEZEICHNUNG'] . "\n";
}

oci_free_statement($stmt);
oci_close($conn);
Erste 5 Produkte: 1: Laptop 2: Maus 3: Tastatur 4: Monitor 5: Drucker

// Wichtig · Fallstricke

Veraltet: ocifetchstatement() ist ein Alias von oci_fetch_all(). In neuem Code sollte ausschließlich oci_fetch_all() verwendet werden, da Aliasfunktionen in zukünftigen PHP-Versionen ohne Vorwarnung entfernt werden können.

Speicherverbrauch: Da alle Zeilen auf einmal in den Speicher geladen werden, kann diese Funktion bei sehr großen Ergebnismengen zu hohem Speicherbedarf führen. Für große Datensätze empfiehlt sich der zeilenweise Abruf mit oci_fetch_assoc() oder oci_fetch_array().

Spaltennamen: Beim Standard-Flag OCI_ASSOC werden Spaltennamen grundsätzlich in Großbuchstaben zurückgegeben.