oci_fetch_array Возвращает следующую строку из результата запроса в виде ассоциативного или нумерованного массива &reftitle.description; arrayfalseoci_fetch_array resourcestatement intmodeOCI_BOTH | OCI_RETURN_NULLS Возвращает массив, содержащий следующую строку результата запроса. Каждый элемент массива соответствует одному полю из строки. Эта функция обычно вызывается в цикле, пока она не вернёт &false;, который указывает на отсутствие последующих строк. Если statement соответствует PL/SQL блоку, возвращаемому Oracle Database Implicit Result Sets, тогда будут последовательно извлечены ряды из всех наборов. Если statement возвращается из oci_get_implicit_resultset, тогда вернётся только часть рядов для одного дочернего запроса. &oci.datatypes; &reftitle.parameters; statement &oci.arg.statement.id; Также может быть идентификатором, возвращаемым функцией oci_get_implicit_resultset. mode Необязательный второй параметр может состоять из любой комбинации следующих констант: <function>oci_fetch_array</function> Modes Константа Описание OCI_BOTH Возвращает массив как с ассоциативными и числовыми индексами. Эта константа то же самое что и OCI_ASSOC + OCI_NUM, и она используется по умолчанию. OCI_ASSOC Возвращает ассоциативный массив. OCI_NUM Возвращает нумерованный массив. OCI_RETURN_NULLS Создаёт элементы для полей равных &null;. Значение элемента будет равно PHP &null;. OCI_RETURN_LOBS Возвращает содержимое полей типа LOB, вместо LOB указателя.
По умолчанию mode равен OCI_BOTH. Используйте оператор сложения "+" для указания более одного режима.
&reftitle.returnvalues; Возвращает массив с ассоциативными и/или числовыми ключами. Если больше нет строк в statement, то возвращается &false;. По умолчанию, поля LOB возвращаются как указатели LOB. Поля типа DATE возвращаются в формате строк, соответствующем текущему формату даты. Формат по умолчанию может быть изменён с помощью переменных окружения Oracle, таких как NLS_LANG, или предварительным выполнением команды ALTER SESSION SET NLS_DATE_FORMAT. Регистронезависимые (по умолчанию в Oracle) имена полей будут иметь ассоциативные индексы в верхнем регистре в результирующем массиве. Регистрозависимые имена полей будут иметь индексы с теми же регистрами символов, что и само поле. Используйте var_dump для результирующего массива, чтобы проверить соответствие регистров символов для каждого запроса. Имя таблицы не входит в ассоциативны индекс. Если ваш запрос содержит два разных поля с одинаковым именем, используйте OCI_NUM или добавьте алиас для поля в запрос, так чтобы имена стали уникальными (смотрите пример #7). Иначе будет возвращено только одно поле. &reftitle.examples; <function>oci_fetch_array</function> с <constant>OCI_BOTH</constant> \n"; echo $row[1] . " и " . $row['DEPARTMENT_NAME'] . " идентичны
\n"; } oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> с <constant>OCI_NUM</constant> \n"; echo $row[1]->read(11) . "
\n"; // это выведет первые 11 байт DESCRIPTION } // Выведет: // 1 // A very long oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> с <constant>OCI_ASSOC</constant> \n"; echo $row['DESCRIPTION']->read(11) . "
\n"; // это выведет первые 11 байт DESCRIPTION } // Выведет: // 1 // A very long oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> с <constant>OCI_RETURN_NULLS</constant> string(1) "1" } */ $stid = oci_parse($conn, 'SELECT 1, null FROM dual'); oci_execute($stid); while (($row = oci_fetch_array ($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { // Получает NULL значения var_dump($row); } /* Вышеуказанный код выведет: array(2) { [1]=> string(1) "1" ["NULL"]=> NULL } */ ?> ]]> <function>oci_fetch_array</function> с <constant>OCI_RETURN_LOBS</constant> \n"; echo $row['DESCRIPTION'] . "
\n"; // содержит весь DESCRIPTION // В цикле, очищение больших переменных перед повторным получением данных, уменьшает пиковое потребление памяти PHP unset($row); } // Выведет: // 1 // A very long string oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> с регистрозависимыми названиями полей \n"; // выведет Chris print $row['CITY'] . "
\n"; // выведет Melbourne oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> с полями с одинаковыми названиями // string(9) "Australia" // } // Для получения полей с повторяющимся названием используйте SQL псевдонимы (alias) для полей. Например "AS ctnm": $sql = 'SELECT mycity.name AS ctnm, mycountry.name FROM mycity, mycountry WHERE mycity.id = mycountry.id'; $stid = oci_parse($conn, $sql); oci_execute($stid); $row = oci_fetch_array($stid, OCI_ASSOC); var_dump($row); // Выведет записи из обоих полей: // array(2) { // ["CTNM"]=> // string(9) "Melbourne" // ["NAME"]=> // string(9) "Australia" // } oci_free_statement($stid); oci_close($conn); ?> ]]> <function>oci_fetch_array</function> с полями <literal>DATE</literal> \n"; // выведет 1997-06-14 oci_free_statement($stid); oci_close($conn); ?> ]]> <function>oci_fetch_array</function> с <literal>REF CURSOR</literal> \n"; while (($row = oci_fetch_array($refcur, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { echo "\n"; foreach ($row as $item) { echo " ".($item !== null ? htmlentities($item, ENT_QUOTES) : "")."\n"; } echo "\n"; } echo "\n"; oci_free_statement($refcur); oci_free_statement($stid); oci_close($conn); ?> ]]> Постраничный вывод с помощью <function>oci_fetch_array</function> используя <literal>LIMIT</literal>-подобный запрос = 12) { // Используем Oracle 12c OFFSET / FETCH NEXT синтаксис $sql = $sql . ' OFFSET :offset ROWS FETCH NEXT :numrows ROWS ONLY'; } else { // Cтарые версии Oracle нуждаются в выборке с помощью подзапроса в $sql. // Или, если SQL выражение известно на стадии разработки, то с помощью // функции row_number(). Будьте осторожны и избегайте возможности // SQL-инъекции при объединении строк в боевом окружении. $sql = "SELECT * FROM (SELECT a.*, ROWNUM AS my_rnum FROM ($sql) a WHERE ROWNUM <= :offset + :numrows) WHERE my_rnum > :offset"; } $offset = 0; // skip this many rows $numrows = 5; // return 5 rows $stid = oci_parse($conn, $sql); oci_bind_by_name($stid, ':numrows', $numrows); oci_bind_by_name($stid, ':offset', $offset); oci_execute($stid); while (($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) != false) { echo $row['CITY'] . " " . $row['POSTAL_CODE'] . "
\n"; } // Выведет: // Beijing 190518 // Bern 3095 // Bombay 490231 // Geneva 1730 // Hiroshima 6823 oci_free_statement($stid); oci_close($conn); ?> ]]>
<function>oci_fetch_array</function> c Oracle Database Implicit Result Sets \n"; while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) { echo "\n"; foreach ($row as $item) { echo " ".($item!==null?htmlentities($item, ENT_QUOTES|ENT_SUBSTITUTE):"")."\n"; } echo "\n"; } echo "\n"; // Выведет: // Beijing 190518 // Bern 3095 // Bombay 490231 // CN // CH // IN oci_free_statement($stid); oci_close($conn); ?> ]]>
&reftitle.notes; Индексы ассоциативного массива необходимо приводить в верхний регистр для стандартных полей Oracle, созданных с регистронезависимыми названиями. &oci.use.setprefetch; Функция oci_fetch_array немного медленней oci_fetch_assoc или oci_fetch_row, но более гибкая. &reftitle.seealso; oci_fetch oci_fetch_all oci_fetch_assoc oci_fetch_object oci_fetch_row oci_set_prefetch