oci_fetch_all

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

oci_fetch_allHolt mehrere Reihen einer Abfrage in ein zweidimensionales Array

Beschreibung

oci_fetch_all ( resource $statement , array &$output [, int $skip = 0 [, int $maxrows = -1 [, int $flags = OCI_FETCHSTATEMENT_BY_COLUMN + OCI_ASSOC ]]] ) : int

Holt 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.

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 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.

oci_fetch_all() Array-Struktur-Modi
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.

oci_fetch_all() Array-Index-Modi
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.

Rückgabewerte

Gibt die Anzahl der Zeile in output zurück, die 0 oder mehr sein kann. Im Fehlerfall wird FALSE zurückgegeben.

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 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($itemENT_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$resnullnullOCI_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$resnullnullOCI_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);

?>

Anmerkungen

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.

Siehe auch