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 — Выбирает все строки из результата запроса в двумерный массив
$statement
,&$output
,$offset
= 0,$limit
= -1,$flags
= OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOCВыбирает все строки из результата запроса в двумерный массив. По умолчанию возвращает все строки.
Эта функция может быть вызваться только один раз для каждого запроса запущенного с помощью oci_execute().
statement
Корректный идентификатор
выражения OCI8, полученный из функции oci_parse()
и исполненный функцией oci_execute(),
или идентификатор выражения REF CURSOR
.
output
Переменная, содержащая возвращённые строки.
LOB столбцы возвращаются в виде строк, для которых поддерживается Oracle преобразования.
Смотрите oci_fetch_array() для более детальной информации о том, как производится выборка данных и типов.
offset
Число строк, которых необходимо исключить из выборки. По умолчанию равно 0, выборка возвращается со следующего за первым ряда.
limit
Число возвращаемых строк. По умолчанию равно -1, что означает
возврат всех строк, начиная с указанных в offset
+ 1 предыдущая строка.
flags
Параметр flags
содержит структуру
массива отражает необходимость использования ассоциативных массивов.
Константа | Описание |
---|---|
OCI_FETCHSTATEMENT_BY_ROW |
Массив будет содержать по одному под-массиву на каждую строку запроса. |
OCI_FETCHSTATEMENT_BY_COLUMN |
Массив будет содержать по одному под-массиву на каждый столбец. Используется по умолчанию. |
Массивы могут быть проиндексированы или заголовками столбцов или пронумерованы. Будет возвращён только один режим индексации.
Константа | Описание |
---|---|
OCI_NUM |
Для массива каждого столбца используются числовые индексы. |
OCI_ASSOC |
Для массива каждого столбца используется ассоциативные индексы. По умолчанию. |
Используйте оператор сложения "+" для выбора определённой комбинации структуры и индексации массива.
Регистронезависимые (по умолчанию в Oracle) имена полей в
результирующем массиве будут иметь ассоциативные индексы в
верхнем регистре. Регистрозависимые имена полей будут иметь
индексы с теми же регистрами символов, что и само поле.
Используйте var_dump() на output
,
чтобы проверить соответствие регистров символов для каждого запроса.
В запросах в которых имеется несколько столбцов с одинаковыми именами необходимо использовать псевдонимы. Иначе только один из столбцов появится в ассоциативном массиве.
Возвращает число столбцов в output
, который
может принимать значение 0 или более.
Пример #1 Пример использования oci_fetch_all()
<?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 строк получено<br>\n";
var_dump($res);
// Вывод var_dump:
// 2 строк получено
// array(2) {
// ["POSTAL_CODE"]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(6) "10934x"
// }
// ["CITY"]=>
// array(2) {
// [0]=>
// string(4) "Roma"
// [1]=>
// string(6) "Venice"
// }
// }
// Форматирование результатов
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);
?>
Пример #2 Пример использования oci_fetch_all() с 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 строк получено<br>\n";
var_dump($res);
// Выведет:
// 2 строк получено
// array(2) {
// [0]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "00989x"
// ["CITY"]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// ["POSTAL_CODE"]=>
// string(6) "10934x"
// ["CITY"]=>
// string(6) "Venice"
// }
// }
oci_free_statement($stid);
oci_close($conn);
?>
Пример #3 Пример использования oci_fetch_all() с 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 строк получено<br>\n";
var_dump($res);
// Выведет:
// 2 строк получено
// array(2) {
// [0]=>
// array(2) {
// [0]=>
// string(6) "00989x"
// [1]=>
// string(4) "Roma"
// }
// [1]=>
// array(2) {
// [0]=>
// string(6) "10934x"
// [1]=>
// string(6) "Venice"
// }
// }
oci_free_statement($stid);
oci_close($conn);
?>
Замечание:
Использование
offset
неэффективно. Все пропускаемые ряды включаются в результат запроса возвращаемый базой данных к PHP. После этого они исключаются. Более эффективно использовать SQL для отступа и ограничения рядов в запросе. Смотрите oci_fetch_array() для примеров.
Замечание:
Запросы, возвращающие большое число рядов, могут быть более эффективными если используется однорядная функция выборки, такая как oci_fetch_array().
Замечание:
Для запросов, которые возвращают большое количество рядов, производительность может быть значительно увеличена за счёт увеличения значения опции oci8.default_prefetch или вызова функции oci_set_prefetch().
Замечание:
Не возвращает ряды для неявных результирующих наборов в Oracle Database 12c. Используйте вместо данной функции функцию 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)