(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_fetch_all — Holt mehrere Reihen einer Abfrage in ein zweidimensionales Array
$statement
, array &$output
[, int $skip
= 0
[, int $maxrows
= -1
[, int $flags
= OCI_FETCHSTATEMENT_BY_COLUMN
+ OCI_ASSOC
]]] ) : intHolt mehrere Zeilen einer Abfrage in ein zweidimensionales Array. Standardmäßig werden alle Zeilen zurückgeliefert.
Diese Funktion kann nur einmal für jede Abfrage, die mit oci_execute() ausgeführt wurde, aufgerufen werden.
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 gelieferten Zeilen enthalten wird.
LOB-Spalten werden als Zeichenketten zurückgegeben, wo Oracle die Umwandlung unterstützt.
Informationen wie Daten und Typen geholt werden, sind der Dokumentation von oci_fetch_array() zu entnehmen.
skip
Die Anzahl der zu verwerfenden Anfangszeilen beim Holen des Ergebnisses. Standardwert ist 0, so dass von der ersten Zeile an zurückgegeben wird.
maxrows
Die Anzahl der zurückzugebenden Zeilen. Der Standardwert ist -1, was bedeutet
dass alle Zeilen von skip
+ 1 an zurückgegeben werden.
flags
Der Parameter flags
legt die Array-Struktur fest,
und ob assoziative Arrays verwendet werden sollen.
Konstante | Beschreibung |
---|---|
OCI_FETCHSTATEMENT_BY_ROW |
Das äußere Array wird ein Unterarray pro Abfragezeile 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.
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-Modus 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 dem 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 einer der Spalten in einem assoziativen Array auftauchen.
Gibt die Anzahl der Zeile in output
zurück, die 0 oder
mehr sein kann. Im Fehlerfall wird FALSE
zurückgegeben.
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 Zeilen geholt<br>\n";
var_dump($res);
// die var_dump Ausgabe ist:
// 2 Zeilen geholt
// 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 Zeilen geholt<br>\n";
var_dump($res);
// die Ausgabe ist:
// 2 Zeilen geholt
// 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 Zeilen geholt<br>\n";
var_dump($res);
// die Ausgabe ist:
// 2 Zeilen geholt
// 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);
?>
Hinweis:
Die Verwendung von
skip
ist sehr ineffizient. All die zu überspringenden Zeilen sind in der Ergebnismenge, die von der Datenbank an PHP zurückgegeben wird. Dann werden sie verworfen. Es ist effizienter SQL zu nutzen, um Offset und Bereich der Zeilen 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 Zeilen liefern, sind speichereffizienter, wenn eine Funktion wie oci_fetch_array(), die nur einzelne Zeilen holt, verwendet wird.
Hinweis:
Bei Queries, die eine große Anzahl an Zeilen zurückliefern, kann die Laufzeit beträchtlich verbessert werden, indem man oci8.default_prefetch erhöht oder oci_set_prefetch() verwendet.
Hinweis:
Dies gibt keine Zeilen von "Implizeten Ergebnismengen" von Oracle Database 12c zurück. Statt dessen ist oci_fetch_array() zu verwenden.