oci_fetch_all
(PHP 5, PHP 7, PHP 8, PECL OCI8 >= 1.1.0)
oci_fetch_all — 쿼리에서 여러 행을 2차원 배열로 가져옵니다.
설명
oci_fetch_all( resource $statement, array &$output, int $offset = 0, int $limit = -1, int $flags = OCI_FETCHSTATEMENT_BY_COLUMN | OCI_ASSOC ): int
oci_parse()에서 이전에 반환된 statement
을 실행합니다.
쿼리에서 여러 행을 2차원 배열로 가져옵니다. 기본적으로 모든 행이 반환됩니다.
이 함수는 oci_execute()로 실행된 각 쿼리에 대해 한 번만 호출할 수 있습니다.
매개변수
statement
- oci_parse()에 의해 생성되고 oci_execute()에 의해 실행되는 유효한 OCI8 문 식별자 또는 REF CURSOR 문 식별자.
output
- 반환된 행을 포함할 변수입니다.
LOB 열은 Oracle이 변환을 지원하는 문자열로 반환됩니다.
데이터 및 유형을 가져오는 방법에 대한 자세한 내용은 oci_fetch_array()를 참조하십시오.
offset
- 결과를 가져올 때 버릴 초기 행 수입니다. 기본값은 0이므로 첫 번째 행 이후가 반환됩니다.
limit
- 반환할 행 수입니다. 기본값은
offset
+ 1 이후의 모든 행을 반환함을 의미하는 -1입니다. flags
- 매개변수
flags
는 배열 구조와 연관 배열을 사용해야 하는지 여부를 나타냅니다.oci_fetch_all() 배열 구조 모드
상수 설명 OCI_FETCHSTATEMENT_BY_ROW
외부 배열에는 쿼리 행당 하나의 하위 배열이 포함됩니다. OCI_FETCHSTATEMENT_BY_COLUMN
외부 배열에는 쿼리 열당 하나의 하위 배열이 포함됩니다. 이것이 기본값입니다. 배열은 열 머리글 또는 숫자로 인덱싱될 수 있습니다. 하나의 인덱스 모드만 반환됩니다.
oci_fetch_all() 배열 인덱스 모드
상수 설명 OCI_NUM
숫자 인덱스는 각 열의 배열에 사용됩니다. OCI_ASSOC
연관 인덱스는 각 열의 배열에 사용됩니다. 이것이 기본값입니다. 더하기 연산자 "+"를 사용하여 배열 구조와 인덱스 모드의 조합을 선택합니다.
대소문자를 구분하지 않는 Oracle의 기본 열 이름에는 대문자 배열 키가 있습니다. 대소문자를 구분하는 열 이름에는 정확한 열 대소문자를 사용하는 배열 키가 있습니다.
output
에서 var_dump()를 사용하여 각 쿼리에 사용할 적절한 케이스를 확인합니다.같은 이름의 열이 두 개 이상 있는 쿼리는 열 별칭을 사용해야 합니다. 그렇지 않으면 열 중 하나만 연관 배열에 나타납니다.
반환 값
0 이상일 수 있는 output
의 행 수를 반환합니다.
Examples
예제 #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 output is:
// 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"
// }
// }
// Pretty-print the results
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_FETCHSTATEMENT_BY_ROW가 있는 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, null, null, OCI_FETCHSTATEMENT_BY_ROW);
echo "$nrows rows fetched<br>\n";
var_dump($res);
// Output is:
// 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_NUM이 있는 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, null, null, OCI_FETCHSTATEMENT_BY_ROW + OCI_NUM);
echo "$nrows rows fetched<br>\n";
var_dump($res);
// Output is:
// 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);
?>
노트
메모:
offset
을 사용하는 것은 매우 비효율적입니다. 건너뛸 모든 행은 데이터베이스에서 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() - 쿼리에서 미리 가져올 행 수를 설정합니다.