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