for문 질문입니다

for문 질문입니다

QA

for문 질문입니다

본문

안녕하세요

 

그누보드5를 다운받아서 코들르 보면서 뒷단을 공부중인 앞단 개발자입니다.

 

for ($i=0; $row=sql_fetch_array($result); $i++)

 

이 구문에서 의문이 생겨서 질문드립니다.

 

제가 아는 for문에 가운데 들어가는 부분은 그 조건이 참일때 반복문을 계속 돌리는 걸로 알고 있는데요

 

$i가 증가하는데 가운데 있는 조건과 무슨 상관이 있는건지 궁금합니다

이 질문에 댓글 쓰기 :

답변 4

for문의 가운데는 비교문과 상관이 있습니다.

증가값과는 비교문과 연동되면 상관이 있고

비교문과 연동이 없으면 상관이 없겠죠

 

PHP에서 비교문은 

참일때 작동합니다.

for문의 중간도 비교문이죠

 

sql_fetch_array는 내부적으로 mysql_fetch_array등과 연동되는데

호출될때마다 다음레코드단위로 가져옵니다.

마지막은 null 이겠죠

 

위에서 조건문의 설명중

PHP에서 참인조건은

(1) true

(2) 0이 아닌 값

(3) null이 아닌값

(4) 양수

(5) 공백이 아닌값

 

반대로 거짓(false)인 조건은

(1) false

(2) 0

(3) 공백

(4) null

입니다.

 

for문은 (초기값; 비교문; 증가값)

비교문이 참이면 수행

 

으로 이루어져있습니다.

 

 

(2) false

그럼 sql_fetch_array가 for문이 한번 돌때 $result 값을 하나씩 가져온느 건가요?
테이블에 행이 3개있으면 한번에 3개를 가져오는게 아니고 하나씩 가져와서 4번째 반복때에서
가져올 값이 없으니 false가 되어 반복문이 중단되는 건가요?

 
네, 위의 문장구조로는
$result는 mysql의 레코드 포인터인것이구요
$row는 해당 Row의 값들(쿼리에서 * 로 한경우 해당 row전체, 명시한 경우 명시한 컬럼들만)을
가져와서 처리하는거죠

말씀하신대로 3개의 Row이면
4번째는 값이  null 이기때문에 종료됩니다.

그누보드의 sql_query()는 mysqli_query() 에 해당하고,

sql_fetch_array()는 mysqli_fetch_assoc()에 해당합니다.

 

$result = sql_query(); $result에는 이렇게 검색한 결과값(모든 행과 컬럼)들을 갖게 되는데

이 셑(set)에서 한 행씩 가져와 리턴해 주는 함수가

$row = sql_fetch_array() 함수고 리턴한 한 행이 $row에 저장되어 사용됩니다.

 

만약 테이블에 세개의 행이 있다면 

for($i=0; $row=sql_fetch_array($result);$i++) 에서 

$i=0 일때 $row는 true임니다.

$i=1 일때 $row는 true 입니다.

$i=2 일때 $row는 true 입니다.

 

$i=3 일때 $row는 false가 됩니다.

 

$row=sql_fetch_array($result)를 $row[$i] 또는 $result[$i]로 하면 원하는 결과를 얻으실 수 없게 됩니다.

가운데 조건과 상관은 없습니다.

 

$i 를 넘버링용으로 활용한다던지 하는 목적으로, 넣었을 가능성은 있습니다.

 

for 문 안에 $i 를 활용하는 부분이 없다면,

 

while ($row=sql_fetch_array($result)) {

..

}

문으로 해도 됩니다.

 

for 문안에 $i 를 딱히 쓰는 부분이 없다면,

다른 곳에서 쓰는 코드를 복사하였거나, 습관적인 성격일 수 있습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 7
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT