갑자기 급 궁금해졌습니다.. sql_fetch_array 가.
본문
안녕하세요.
갑자기 문뜩 궁금해졌습니다.
$result = sql_query($sql); 로 데이터를 뽑아서.
for ($i=0; $row=sql_fetch_array($result); $i++)
데이터를 출력한다고 가정했을때.
저 반복문은 어떤 이유로 $result의 수만큼 반복하는건가요?
$result 의 [num_rows] 의 수만큼 반복하도록 되어져 있는건가요?
for에서 비교문쪽 $row=sql_fetch_array($result); 이부분이
$i < $result의 num_row 수
이렇게 해석되게 되어져 있는건가요??
답변 3
제 어설픈 지식으론, sql_fetch_array() 함수 특성탓 같네요.
한줄한줄 데이터의 행을 row 변수에 패치시키다가 패치할 게 없으면 자동으로 끝나는 식...
for 문에서 두번째 표현 영역은 <조건 표현식>입니다.
즉 두번째 표현식이 '참'인 경우 계속 반복입니다.
for ($i = 0; $i < 10; i++) 문의 경우,
$i 가 0일때, 1일 때, ... 9일 때까지 반복이고..
$i 가 10이되면 -> 두번째 표현식이 거짓(false)이 되어 수행이 되지 않습니다.
for ($i=0; $row=sql_fetch_array($result); $i++) 문도 마찬가지로..
두번째 표현식이 참(true)인 경우 반복입니다.
sql_fetch_array 는 $result 에서 한 줄(row) 씩 fetch 해오는 함수이고,
더이상 fetch 할 줄이 없는 경우 false 를 return 합니다.
그래서 저 for문은,
쿼리 결과값 줄이 5줄이라면.. -> 5줄 fetch 해 오는 동안 반복
쿼리 결과값 줄이 100줄이라면.. -> 100줄 fetch 해 오는 동안 반복
입니다.
그래서.. 다음의
while ($row=sql_fetch_array($result)) 문으로 변경하여도..
반복수행 결과는 동일합니다. 다만 증가하는 $i 변수를 사용할 일이 있다면.. for문을 쓰는 경우도 있습니다.
for에서 비교문쪽 $row=sql_fetch_array($result); 이부분이
조건문이 됩니다. 그래서 해당하는 값이 없을 경우에 탈출합니다.
for ($i=0; $i<count($result); $i++) { <=== 이런식이면 좋았을건데 위처럼 있으니 어렵게 느끼 셨을수도 있겠네요.