2010-12-28 6 views
1

나는 자바 스크립트를 생성하기 위해 작성한 PHP 스크립트에서 혼란스러운 것을 발견했습니다. 여기 아래에 약간 단순화되어 있습니다.while 루프 재설정

첫 번째 while 루프 전체를 주석 처리하지 않으면 두 번째 while 루프가 실행되지 않습니다. 왜 그 이유를 설명 할 수 있습니까? 많은 감사합니다.

<?php 
$listid = 2; //DEMO ONLY 
$result1 = mysql_query("SELECT words.wid,words.wordmd5,words.word FROM words,instances WHERE words.wid = instances.wid AND instances.lid = \"$listid\""); 
$result1copy = $result1; 

$count1 = 1; 
while($row = mysql_fetch_object($result1)) 
{ 
print "words_left[$count1] = \"".$row->word."\";\n"; 
//Increment the array counter (starts at 1) 
$count1++; 
} 
?> 

//Some javascript 

    <?php  

    $count2 = 1; 
while($row = mysql_fetch_object($result1copy)) 
{  
print " 
    $count2 then $row->wordmd5 
";  
$count2++; 
} 
?> 
+0

무한 루프입니다. 당신은'$ count1'을 증가 시키지만, while 루프는'true'를 항상 리턴하는'$ row'를 테스트하고 있습니다. – Kai

+2

@Kai : $ row는 항상 true가 아니며, 모든 레코드가 처리 될 때 null이됩니다. – Chetan

답변

3

what T.J. Crowder already said 외에도 mysql_data_seek($result1, 0)은 두 개의 루프 사이에서 작업을 수행하여 내부 반복기를 재설정합니다.

+0

그건 대접 받았어요. 감사. 왜 작동합니까? –

+0

@ 패트릭 :'mysq_data_seek'는 데이터 세트의 내부 행 포인터를 특정 포인트로 이동시킵니다. 이 경우 결과 집합의 시작 부분 인 행 0으로 이동합니다. – Powerlord

+0

많은 분들께 감사드립니다. –

4

당신은 복사 결과 집합, 당신은 결과 세트에 두 참조와 종료했습니다하지 않았습니다. 기본 결과 집합 개체는 사용하는 참조에 관계없이 동일하므로 두 번째 루프가 시작될 때까지 모든 레코드를 이미 처리했습니다.

아마도 단일 루프를 사용하고 배열에 출력 할 데이터를 추적하고 싶을 것입니다. 또는 as Flinsch points out 인 경우 일 수 있으며 버퍼링 된 쿼리를 사용 중이므로 mysql_data_seek을 사용하여 결과 집합의 처음으로 돌아갈 수 있습니다.

+0

어떻게 직접 복사합니까? –