oci_fetch_all
(PHP 5, PHP 7, PECL OCI8 >= 1.1.0)
oci_fetch_all — Выбирает все строки из результата запроса в двумерный массив
Описание
$statement
, array &$output
[, int $skip
= 0
[, int $maxrows
= -1
[, int $flags
= OCI_FETCHSTATEMENT_BY_COLUMN
+ OCI_ASSOC
]]] )Выбирает все строки из результата запроса в двумерный массив. По умолчанию возвращает все строки.
Эта функция может быть вызваться только один раз для каждого запроса запущенного с помощью oci_execute().
Список параметров
-
statement
-
Корректный идентификатор выражения OCI8, полученный из oci_parse() и исполненный функцией oci_execute(), или идентификатор выражения REF CURSOR.
-
output
-
Переменная, содержащая возвращенные строки.
LOB столбцы возвращаются в виде строк, для которых поддерживается Oracle преобразования.
См. oci_fetch_array() для более детальной информации о том, как производится выборка данных и типов.
-
skip
-
Число строк, которых необходимо исключить из выборки. По умолчанию равно 0, выборка возвращается со следующего за первым ряда.
-
maxrows
-
Число возвращаемых строк. По умолчанию равно -1, что означает возврат всех строк, начиная с указанных в
skip
+ 1 предыдущая строка. -
flags
-
Параметр
flags
содержит структуру массива отражает необходимость использования ассоциативных массивов.Структура массива oci_fetch_all() Константа Описание OCI_FETCHSTATEMENT_BY_ROW
Массив будет содержать по одному под-массиву на каждую строку запроса. OCI_FETCHSTATEMENT_BY_COLUMN
Массив будет содержать по одному под-массиву на каждый столбец. Используется по умолчанию. Массивы могут быть проиндексированы или заголовками столбцов или пронумерованы. Будет возвращен только один режим индексации.
Индексация массива oci_fetch_all() Константа Описание OCI_NUM
Для массива каждого столбца используются числовые индексы. OCI_ASSOC
Для массива каждого столбца используется ассоциативные индексы. По умолчанию. Используйте оператор сложения "+" для выбора определенной комбинации структуры и индексации массива.
Регистронезависимые (по умолчанию в Oracle) имена полей в результирующем массиве будут иметь ассоциативные индексы в верхнем регистре. Регистрозависимые имена полей будут иметь индексы с теми же регистрами символов, что и само поле. Используйте var_dump() на on
output
, чтобы проверить соответствие регистров символов для каждого запроса.В запросах в которых имеется несколько столбцов с одинаковыми именами необходимо использовать псевдонимы. Иначе только один из столбцов появится в ассоциативном массиве.
Возвращаемые значения
Возвращает число столбцов в output
, который
может принимать значение 0 или более, или FALSE
в случае возникновения ошибки.
Примеры
Пример #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 rows fetched<br>\n";
var_dump($res);
// Вывод var_dump:
// 2 rows fetched
// 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 rows fetched<br>\n";
var_dump($res);
// Выведет:
// 2 rows fetched
// 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 rows fetched<br>\n";
var_dump($res);
// Выведет:
// 2 rows fetched
// 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);
?>
Примечания
Замечание:
Использование
skip
неэффективно. Все пропускаемые ряды включаются в результат запроса возвращаемый базой данных к PHP. После этого они исключаются. Более эффективно использовать SQL для отступа и ограничения рядов в запросе. См. oci_fetch_array() для примеров.
Замечание:
Запросы, возвращающие большое число рядов, могут быть более эффективными если используется однорядная функция выборки, такая как oci_fetch_array().
Замечание:
Для запросов, возвращающих большое количество рядов, производительность может быть значительно увеличена с помощью увеличения значения опции oci8.default_prefetch или использования oci_set_prefetch().
Замечание:
Не возвращает ряды для неявных результирующих наборов в Oracle Database 12c. Используйте вместо данной функции функцию oci_fetch_array().
Смотрите также
- oci_fetch() - Выбирает следующую строку из результата в буфер
- oci_fetch_array() - Возвращает следующую строку из результата запроса в виде ассоциативного или нумерованного массива
- oci_fetch_assoc() - Возвращает следующую строку из результата запроса в виде ассоциативного массива
- oci_fetch_object() - Возвращает следующую строку из результата запроса в виде объекта
- oci_fetch_row() - Возвращает следующую строку из результата запроса в виде нумерованного массива
- oci_set_prefetch() - Устанавливает количество строк, которые будут автоматически выбраны в буфер
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- Oracle OCI8
- oci_bind_array_by_name
- oci_bind_by_name
- oci_cancel
- oci_client_version
- oci_close
- oci_commit
- oci_connect
- oci_define_by_name
- oci_error
- oci_execute
- oci_fetch_all
- oci_fetch_array
- oci_fetch_assoc
- oci_fetch_object
- oci_fetch_row
- oci_fetch
- oci_field_is_null
- oci_field_name
- oci_field_precision
- oci_field_scale
- oci_field_size
- oci_field_type_raw
- oci_field_type
- oci_free_descriptor
- oci_free_statement
- oci_get_implicit_resultset
- oci_internal_debug
- oci_lob_copy
- oci_lob_is_equal
- oci_new_collection
- oci_new_connect
- oci_new_cursor
- oci_new_descriptor
- oci_num_fields
- oci_num_rows
- oci_parse
- oci_password_change
- oci_pconnect
- oci_result
- oci_rollback
- oci_server_version
- oci_set_action
- oci_set_client_identifier
- oci_set_client_info
- oci_set_edition
- oci_set_module_name
- oci_set_prefetch
- oci_statement_type
Коментарии
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)
Beware that only numerically indexed results will be returned if
OCI_NUM is used.