2012-01-04 7 views
0

내 PHP 스크립트에 문제가있어. 이 스크립트는 두 개의 <ul>을 생성합니다. 하나는 이미지가 있고 다른 하나는 축소판 이미지입니다. PHP는 첫 번째 while 루프를 완벽하게 실행하지만 축소판에 대한 내 <ul>은 항상 비어있게됩니다. 나는 운이 없어 그것을 통해 일해 왔고 나는 어떤 오류를 인쇄하기 위해 스크립트를 얻는 것 같지 않습니다. 도움?두 개의 동일한 while 루프 함수, 두 번째 작동하지 않습니다

include "../backend/connect.php"; 
$query = "select image_id from images where thumb != '';"; 
$result = mysql_query($query); 
<div id="main"> 
    <div id="container"> 
     <ul> 
      <?php 
      while ($row = mysql_fetch_array($result)) { 
       $img_id = $row['image_id']; 
      ?> 
      <li class="hidden" id="<?php print($img_id); ?>" style="background-image:url(/pull.php?id=<?php print($img_id);?>&thumb=false)"></li> 
      <?php } ?> 
      <li class="" id="focus"></li> 
     </ul> 
    </div> 
</div> 
<div id="side"> 
    <div id="photos"><ul> 
    <?php 
    while ($row = mysql_fetch_array($result)) { 
     $img_id = $row['image_id']; 
    ?> 
     <div class="imgDiv" id="<?php print($img_id); ?>" > 
      <li> 
       <img src="pull.php?id=<?php print($img_id);?>&thumb=true" class="thumbnail"/> 

      </li> 
     </div> 
    <?php 
     } 
    ?> 
    </ul></div> 
    </div> 
</div> 

답변

5

while 루프를 사용하여 결과를 반복하면 두 번 할 수 없습니다.

mysql_data_seek($result, 0);을 호출하면 처음부터 다시 처음부터 내부 포인터를 첫 번째 레코드로 재설정하여 다시 시작합니다.

+0

호기심에서 내부 포인터를 다시 설정하고 내용을 배열에 덤프하는 것과 반대되는 동일한 리소스를 재사용하면 성능상의 이점이 있습니까? (엄청난 결과 세트 제외하고, 자연 스럽다.) 그런 식으로 생각한 적이 없기 때문에 궁금하다. – Farray

+0

실제 테스트 없이는 확실하지 않지만 결과를 추가 배열로 덤핑하면 두 배가 될 것 같다. 사용되는 메모리는 작지만 결과는 작습니다. –

+0

while ($ row = mysql_fetch_array ($ result))는 한 번에 한 행씩 메모리로 가져 오기 때문에 각 행마다 필요한 메모리 만 사용합니다 ... 루프에 넣기 전에 배열로 덤핑하면 총 메모리가 사용됩니다 결과 집합에서 모든 행의 합계 ... 및 결과 집합 포인터를 다시 설정하기위한 성능 오버 헤드는 최소가됩니다 ... 결과 집합에서 배열을 작성하는 것보다 덜 –

1

그것은 아마도 첫 번째 루프에서 모든 행을 읽을 같은 소리, 그리고 거기에 아무것도 당신이 두 번째 루프 :

+0

그래서 쿼리를 다시 보내야합니까? – DavidR

+0

예. 또는 원래 결과를 배열에 저장하십시오. – paulsm4

+0

또는, 결과 포인터를 처음으로 재설정하는 것이 바람직합니다. – Wiseguy

1

첫 번째 while 루프 mysql_fetch_array($result)을 때까지에 도착하는 시간에 의해 읽을 왼쪽 거짓/비어 있습니다. $ result에 새로운 값을 할당하지 않으므로, 두 번째 값을 얻으면 while 루프를 건너 뜁니다.

결과를 두 번 반복하려면 배열로 덤프하고 foreach을 사용하여 반복합니다.

0

결과를 처음으로 반복하면 실제로 $ 결과 개체가 지워집니다. 다음과 같이하면 루프를 반복 할 수 있습니다.

$image_ids = array(); 
while ($row = mysql_fetch_array($result)) { 
    array_push($img_ids, $row['image_id']); 
} 
?> 

그런 다음 코드를 생성하는 동안 해당 배열을 반복합니다.

관련 문제