Beware that only numerically indexed results will be returned if
OCI_NUM is used.
(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
$statement
,&$output
,$offset
= 0,$limit
= -1,$flags
= OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOCRuft 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.
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.
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.
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.
Gibt die Anzahl der Datensätze in output
zurück,
die 0 oder mehr sein kann.
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);
?>
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().
Beware that only numerically indexed results will be returned if
OCI_NUM is used.
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)