oci_fetch_all

(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)

oci_fetch_all Ruft mehrere Datensätze einer Abfrage in ein zweidimensionales Array ab

Beschreibung

oci_fetch_all(
    resource $statement,
    array &$output,
    int $offset = 0,
    int $limit = -1,
    int $flags = OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC
): int

Ruft mehrere Datensätze einer Abfrage in ein zweidimensionales Array ab. Standardmäßig werden alle Datensätze zurückgegeben.

Diese Funktion kann nur einmal für jede Abfrage, die mit oci_execute() ausgeführt wurde, aufgerufen werden.

Parameter-Liste

statement

Der Identifizierer eines gültigen OCI8-Ausdrucks, der von oci_parse() erzeugt und von oci_execute() oder einem REF CURSOR-Ausdruck verwendet wird.

output

Die Variable, die die zurückgegebenen Datensätze enthalten wird.

LOB-Spalten werden als Zeichenketten zurückgegeben, sofern Oracle die Umwandlung unterstützt.

Informationen, wie Daten und Typen abgerufen werden, sind der Dokumentation von oci_fetch_array() zu entnehmen.

offset

Die Anzahl der zu verwerfenden Anfangsdatensätze beim Abrufen des Ergebnisses. Standardwert ist 0, sodass vom ersten Datensatz an zurückgegeben wird.

limit

Die Anzahl der zurückzugebenden Datensätze. Der Standardwert ist -1, was bedeutet, dass alle Datensätze von offset + 1 an zurückgegeben werden.

flags

Der Parameter flags legt die Array-Struktur fest und ob assoziative Arrays verwendet werden sollen.

Struktur-Modi für das oci_fetch_all()-Array
Konstante Beschreibung
OCI_FETCHSTATEMENT_BY_ROW Das äußere Array wird ein Unterarray pro Abfragedatensatz enthalten.
OCI_FETCHSTATEMENT_BY_COLUMN Das äußere Array wird ein Unterarray pro Abfragespalte enthalten. Das ist der Standardwert.

Arrays können entweder nach Spaltennamen oder numerisch indexiert werden. Nur ein Index-Modus wird zurückgegeben.

Index-Modi für das oci_fetch_all()-Array
Konstante Beschreibung
OCI_NUM Numerische Indizes werden für das Array jeder Spalte verwendet.
OCI_ASSOC Assoziative Indizes werden für das Array jeder Spalte verwendet. Das ist der Standardwert.

Der Additionsoperator "+" ist zu verwenden, um eine Kombination von Array-Struktur- und Index-Modi zu wählen.

Für Spaltennamen, die Groß- und Kleinschreibung nicht unterscheiden, was bei Oracle der Standard ist, werden Arrayschlüssel in Großschreibung verwendet. Spalten, die Groß- und Kleinschreibung unterscheiden, verwenden die genaue Schreibweise. var_dump() kann auf output angewendet werden, um die richtige Schreibweise für jede Abfrage zu prüfen.

Abfragen, die mehr als eine Spalte mit demselben Namen haben, sollten Spaltenaliase verwenden. Andernfalls wird nur eine der Spalten in einem assoziativen Array auftauchen.

Rückgabewerte

Gibt die Anzahl der Datensätze in output zurück, die 0 oder mehr sein kann.

Beispiele

Beispiel #1 oci_fetch_all()-Beispiel

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res);

echo
"$nrows Datensätze abgerufen<br>\n";
var_dump($res);

// die var_dump Ausgabe ist:
// 2 Datensätze abgerufen
// array(2) {
// ["POSTAL_CODE"]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(6) "10934x"
// }
// ["CITY"]=>
// array(2) {
// [0]=>
// string(4) "Rom"
// [1]=>
// string(6) "Venedig"
// }
// }

// ordentliche Ausgabe der Ergebnisse
echo "<table border='1'>\n";
foreach (
$res as $col) {
echo
"<tr>\n";
foreach (
$col as $item) {
echo
" <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."</td>\n";
}
echo
"</tr>\n";
}
echo
"</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

Beispiel #2 oci_fetch_all()-Beispiel mit OCI_FETCHSTATEMENT_BY_ROW

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW);

echo
"$nrows Datensätze abgerufen<br>\n";
var_dump($res);

// die Ausgabe ist:
// 2 Datensätze abgerufen
// array(2) {
// [0]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "00989x"
// ["CITY"]=>
// string(4) "Rom"
// }
// [1]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "10934x"
// ["CITY"]=>
// string(6) "Venedig"
// }
// }

oci_free_statement($stid);
oci_close($conn);

?>

Beispiel #3 oci_fetch_all() mit OCI_NUM

<?php

$conn
= oci_connect('hr', 'welcome', 'localhost/XE');
if (!
$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}

$stid = oci_parse($conn, 'SELECT POSTAL_CODE, CITY FROM locations WHERE ROWNUM < 3');
oci_execute($stid);

$nrows = oci_fetch_all($stid, $res, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM);

echo
"$nrows Datensätze abgerufen<br>\n";
var_dump($res);

// die Ausgabe ist:
// 2 Datensätze abgerufen
// array(2) {
// [0]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(4) "Rom"
// }
// [1]=>
// array(2) {
// [0]=>
// string(6) "10934x"
// [1]=>
// string(6) "Venedig"
// }
// }

oci_free_statement($stid);
oci_close($conn);

?>

Anmerkungen

Hinweis:

Die Verwendung von offset ist sehr ineffizient. All die zu überspringenden Datensätze sind in der Ergebnismenge, die von der Datenbank an PHP zurückgegeben wird. Dann werden sie verworfen. Es ist effizienter SQL zu nutzen, um den Offset und den Bereich der Datensätze in der Abfrage zu beschränken. Ein Beispiel kann der Dokumentation von oci_fetch_array() entnommen werden.

Hinweis:

Abfragen, die eine große Anzahl von Datensätze liefern, sind speichereffizienter, wenn eine Funktion wie oci_fetch_array() verwendet wird, die nur einzelne Datensätze abruft.

Hinweis:

Bei Queries, die eine große Anzahl an Zeilen zurückgeben, kann die Laufzeit beträchtlich verbessert werden, indem man oci8.default_prefetch erhöht oder oci_set_prefetch() verwendet.

Hinweis:

Diese Funktion gibt keine Datensätze aus einer impliziten Ergebnismenge einer Oracle 12c-Datenbank zurück. Verwenden Sie stattdessen die Funktion oci_fetch_array().

Siehe auch

  • oci_fetch() - Ruft die nächste Zeile einer Abfrage in einen internen Puffer ab
  • oci_fetch_array() - Liefert die nächste Zeile einer Abfrage als assoziatives oder numerisches Array
  • oci_fetch_assoc() - Liefert die nächste Zeile einer Abfrage als assoziatives Array
  • oci_fetch_object() - Liefert die nächste Zeile einer Abfrage als Objekt
  • oci_fetch_row() - Liefert die nächste Zeile einer Abfrage als numerisches Array
  • oci_set_prefetch() - Sets number of rows to be prefetched by queries

add a note

User Contributed Notes 2 notes

up
1
david at boeke dot com
21 years ago
The Skip and MaxRows parameters were not added until version 4.2.1.
Previous versions of php used this syntax:

int ocifetchstatement ( resource stmt, array &output)

The function also took a third parameter that was not documented. ( I assume that it was a flag)
up
0
eustaquiorangel at gmail dot com
10 years ago
Beware that only numerically indexed results will be returned if
OCI_NUM is used.
To Top