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