sql_fetch_array($result) 관련하여 채택완료
59xk
4년 전
조회 2,975
</p>
<p><?php</p>
<p> for ($i=0; $od=sql_fetch_array($result); $i++) {</p>
<p> $sql = " SELECT *</p>
<p> FROM {$g5['g5_cart_table']}</p>
<p> WHERE od_id = '{$od['od_id']}'</p>
<p> ORDER BY ct_id ASC ";</p>
<p> $result = sql_query($sql);</p>
<p> $ct_array = array();</p>
<p> for ($j=0; $ct=sql_fetch_array($result); $j++) {</p>
<p> $ct_array[] = $ct;</p>
<p> }</p>
<p> </p>
<p> }</p>
<p>?></p>
<p>
안녕하세요 질문이 있어 문의 드립니다.
1번줄 for 문은 이미 order테이블에 관련된 sql 을 하여
result 로 받아 온 내용이고
그 for문 내부에서 다시 cart 테이블 조회하려고 하는데
그 cart 테이블에 관련된 for문에서 1번줄 위에서 $result 변수를 사용했다가
다시 cart 테이블 조회하는 sql 문도 $result 변수를 하용하였는데 이게 문제가 되는 걸까요?
이것 저것 페이지를 만들면서 테스트를 하다보니
저부분때문인것 같은 추측으로 트래픽이 1g 넘게 올라서
트래픽 초과가 생겼는데 저부분은 cr_result 이런 식으로 1번 for문에서 쓰이는 변수명과는 다르게 아니
문제가 더이상 생기지는 않았습니다.
정확한 원인이나 이유, 또 논리적(?)인 개념이 조금 알고 싶어서 질문글을 올려봅니다.
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
채택된 답변
+20 포인트
4년 전
이중 for문을 돌때 첫번째 for문의 기준이 되는 변수를 바꾸게 되면 당연히 for문이 의도된 대로 동작되지 않습니다.
for문에서 카운트되는 $i, $j를 별도로 두는것처럼 당연히 기준이 for문의 끝을 알리는 되는 기준이 되는 변수 또한 변하지 않는 고정된 값으로 두시거나, 탈출할 수 있는 특정한 조건 구문이 있어야 합니다.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 2개
5
59xk
4년 전
�
볼피드
4년 전
정확히는 위의 구문에서
$result = sql_query($sql); 이 부분이 문제입니다.
$result를 기준으로 포문이 돌고 있는데 $result 변수에 변수를 넣어버리니 위의 조건과는 별개로 종료 조건이 들어간 $result가 포문을 돌아도 $i값이 증가하는거와 별개로 계속 $result의 종료구문이 바뀐다고 볼 수 있습니다.
매 루프마다 조건이 갱신되고, 그것이 종료 조건이 아니기 때문에 계속 무한루프를 돌 수 밖에 없습니다.
만약 의도 된 대로 동작시키고 싶다면 $result 변수명을 다르게 하셔야 합니다
$result2 = sql_query($sql);
for ($j=0; $ct=sql_fetch_array($result2); $j++) {
이런식으로 하셔야 합니다.
$result = sql_query($sql); 이 부분이 문제입니다.
$result를 기준으로 포문이 돌고 있는데 $result 변수에 변수를 넣어버리니 위의 조건과는 별개로 종료 조건이 들어간 $result가 포문을 돌아도 $i값이 증가하는거와 별개로 계속 $result의 종료구문이 바뀐다고 볼 수 있습니다.
매 루프마다 조건이 갱신되고, 그것이 종료 조건이 아니기 때문에 계속 무한루프를 돌 수 밖에 없습니다.
만약 의도 된 대로 동작시키고 싶다면 $result 변수명을 다르게 하셔야 합니다
$result2 = sql_query($sql);
for ($j=0; $ct=sql_fetch_array($result2); $j++) {
이런식으로 하셔야 합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
하나 만 더 여쭤보자면
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 에 넣어서 하면
문제가 되지 않는다.
라고 이해하고 사용한 것인데 이부분이 잘못된 생각인 건가요?