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
) : int|falseВыбирает все строки из результата запроса в двумерный массив. По умолчанию возвращает все строки.
Эта функция может быть вызваться только один раз для каждого запроса запущенного с помощью 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() на
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 строк получено<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);
?>
Примечания
Замечание:
Использование
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() - Устанавливает количество строк, которые будут автоматически выбраны в буфер