sql_fetch_array($result) 관련하여

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
sql_fetch_array($result) 관련하여

QA

sql_fetch_array($result) 관련하여

본문


<?php
    for ($i=0; $od=sql_fetch_array($result); $i++) {
           $sql = " SELECT *
                    FROM {$g5['g5_cart_table']}
                    WHERE od_id = '{$od['od_id']}'
                    ORDER BY ct_id ASC ";
        $result = sql_query($sql);
        $ct_array = array();
        for ($j=0; $ct=sql_fetch_array($result); $j++) {
            $ct_array[] = $ct;
        }
   
        }
?>

 

안녕하세요 질문이 있어 문의 드립니다.

 

1번줄 for 문은 이미 order테이블에 관련된 sql 을 하여

result 로 받아 온 내용이고

 

그 for문 내부에서 다시 cart 테이블 조회하려고 하는데

그 cart 테이블에 관련된 for문에서 1번줄 위에서 $result 변수를 사용했다가

다시 cart 테이블 조회하는 sql 문도 $result 변수를 하용하였는데 이게 문제가 되는 걸까요?

 

이것 저것 페이지를 만들면서 테스트를 하다보니

저부분때문인것 같은 추측으로 트래픽이 1g 넘게 올라서

트래픽 초과가 생겼는데 저부분은 cr_result 이런 식으로 1번 for문에서 쓰이는 변수명과는 다르게 아니

문제가 더이상 생기지는 않았습니다.

 

정확한 원인이나 이유, 또 논리적(?)인 개념이 조금 알고 싶어서 질문글을 올려봅니다.

 

 

이 질문에 댓글 쓰기 :

답변 1

이중 for문을 돌때 첫번째 for문의 기준이 되는 변수를 바꾸게 되면 당연히 for문이 의도된 대로 동작되지 않습니다.

for문에서 카운트되는 $i, $j를 별도로 두는것처럼 당연히 기준이 for문의 끝을 알리는 되는 기준이 되는 변수 또한 변하지 않는 고정된 값으로 두시거나, 탈출할 수 있는 특정한 조건 구문이 있어야 합니다.

답변 감사드립니다.
하나 만 더 여쭤보자면

1번 for문
for ($i=0; $od=sql_fetch_array($result); $i++) {

2번 for문(1번 for문 내의 이중for문)
for ($j=0; $ct=sql_fetch_array($result); $j++) {

이렇게 현 상태 인데 저는
1번 for문의
 $od=sql_fetch_array($result) 이 부분이
이미 결과를 $od 에 넣었고
결국은
1번 for문은
for문이 시작될때

for ($i=0; $od; $i++) {
이렇게 선언이 된 것과 동일 하다.

그러니 그 내부 이중 for문에서
다시
for ($j=0; $ct=sql_fetch_array($result); $j++) {
이렇게 선언하여  sql_fetch_array 함수 에$result 라는 변수로 함수를 선언하여
$ct 에 넣어서 하면

문제가 되지 않는다.

라고 이해하고 사용한 것인데 이부분이 잘못된 생각인 건가요?

정확히는 위의 구문에서
$result = sql_query($sql); 이 부분이 문제입니다.
$result를 기준으로 포문이 돌고 있는데 $result 변수에 변수를 넣어버리니 위의 조건과는 별개로 종료 조건이 들어간 $result가 포문을 돌아도 $i값이 증가하는거와 별개로 계속 $result의 종료구문이 바뀐다고 볼 수 있습니다.
매 루프마다 조건이 갱신되고, 그것이 종료 조건이 아니기 때문에 계속 무한루프를 돌 수 밖에 없습니다.
만약 의도 된 대로 동작시키고 싶다면 $result 변수명을 다르게 하셔야 합니다
$result2 = sql_query($sql);
for ($j=0; $ct=sql_fetch_array($result2); $j++) {
이런식으로 하셔야 합니다.

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

회원로그인

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