안녕하세요.
인포믹스는 UPDATE, DELETE문은 처리가 모두 완료된 후에 제어권이
반환되고 처리된 행의 수가 sqlcq.sqlerrd[2]에 설정됩니다. 그러나
SELECT문의 경우는 병렬처리와 색인의 사용으로 전체데이터가 디스크로
부터 읽혀지기 전에 최초의 행이 반환된다고 합니다. 즉 많은 양의
데이터를 검색할 경우 파이프라인 형태로 작업이 처리되기 때문에
서버내에서 모든 작업이 이루어지기 전에 검색되는 전체행의 수를 알 수
없습니다. 그렇기 때문에 optimizer가 estimate한 값을 sqlca.sqlerrd[2]에
설정하고 첫번째 row를 반환한다고 합니다.
물론 예상하셨겠지만 ifx_num_rows()는 바로 sqlca.sqlerrd[2]의 값을
반환하는 함수고요. 그러므로 정확한 검색될 행의 수는
select count(*) from ...
문장으로 얻어내야 합니다. ESQL/C 에서도 동일하게 적용됩니다.
그래서 일반적인 경우 다음과 같이 작성하고 있습니다.
if ($nResult = ifx_query(...)) {
$aRow = ifx_fetch_row($nResult);
if (is_array($aRow)) {
do {
...
} while (!($aRow = ifx_fetch_row($nResult)));
} else print("자료 없어요...T_T");
} else print(ifx_errormsg());
그럼.
::국연주 님께서 쓰시길::
> 안녕하세요.....^^
> ifx_num_rows()함수 사용에 문제가 생겨서 아시는분의 도움을 구합니다.
>
> 제가 알기론 ifx_num_rows($result)함수는 $result에 대한 행수를 결과값으로 되돌려 주는 걸로 알고
> 있는데...값이 정상적으로 리턴되지 않는것 같아서요..
>
> if(ifx_num_rows($result)){ $row = ifx_fetch_row($result);
> $row[data] = nl2br($row[data]);
> } else echo "<script> alert('자료 엄떠');</script>";
>
> 위 처럼 결과가 있을 경우만 fetch 하도록 하려 했는데 ifx_num_rows()함수를 사용하면 fetch 가 되
> 지 않는것 같습니다.
> 직접 $row = ifx_fetch_row($result);
> $row[data] = nl2br($row[data]);
> 이런식으로 fetch 하면 결과 값이 나오구요...~
>
> ifx_num_rows()에서 문제가 있는거 같은데....
> 다른 분들은 아무 이상없이 사용하고 계신지...
> 제 프로그램 상에 문제가 있는건지...
>
> <?
> include "../include/error.inc";
> include "../include/connection.inc";
> include "../include/config.inc";
>
>
> ifx_textasvarchar(1);
> $que = "select * from freeboard where no='$no' and num=$num and reno=$reno";
> $result = ifx_query($que,$connection);
> if(!$result) error_message("query 실패!!");
>
> /*
> if(ifx_num_rows($result)){ $row = ifx_fetch_row($result);
> $row[data] = nl2br($row[data]);
> } else echo "<script> alert('자료 엄떠');</script>";
> */
>
> $row = ifx_fetch_row($result);
> $row[data] = nl2br($row[data]);
> ifx_free_result($result);
>
> :
> :
> :
> ?>
|