2012-01-04 18 views
0

私のPHPスクリプトに問題があります。このスクリプトは2つの<ul>を生成します.1つは画像で、もう1つはサムネイルです。 PHPは最初のwhileループを完全に実行しますが、サムネイル用の<ul>は常に空に戻ります。私は不運にそれを介して作業してきた、と私はエラーを印刷するスクリプトを取得するように見えることはできません。助けて?2つの同じ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ループを使用して結果をループすると、2回繰り返すことはできません。

mysql_data_seek($result, 0);を呼び出して、最初のレコードの後に​​最初のレコードに内部ポインタを戻して、最初からやり直します。

+0

好奇心の念で、内容を配列にダンプするのではなく、内部ポインタをリセットして同じリソースを再利用することによるパフォーマンス上の利点はありますか? (自然に膨大な結果セットを除いて)ちょうど私がそのようにすることを考えたことがないように好奇心が強い... – Farray

+0

実際のテストがなければわからないが、結果を追加の配列にダンプすると2倍になるだろう使用されるメモリは小さいが、結果はそれを設定する。 –

+0

while($ row = mysql_fetch_array($ result))は、一度に1つの行をメモリにフェッチするだけなので、個々の行に必要なメモリを占有します。ループの前に配列にダンプすると、結果セットのすべての行の合計のうち、結果セットのポインタをリセットするためのパフォーマンスオーバーヘッドは最小限に抑えられます。結果セットから配列を作成するよりも少なくなります –

1

多分あなたが最初のループ内のすべての行を読むように聞こえる、と何もあなたが第二のループに着く時間で読み取るためにそこに残っていないです:)

+0

だから私はクエリを再送信する必要がありますか? – DavidR

+0

はい。または、元の結果を配列に格納します。 – paulsm4

+0

または、好ましくは、結果ポインタを先頭にリセットするだけです。 – Wiseguy

1

あなたの最初のwhileループmysql_fetch_array($result)まで偽/空です。 $ resultに新しい値を割り当てることは決してありません。したがって、2番目の値に達すると、whileはループをスキップします。

結果を2回反復処理する場合は、配列にダンプし、foreachを使用して反復処理します。

0

最初に結果をループすると、実際に$結果オブジェクトがクリアされます。

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

をループしてコードを生成している間ループする可能性があります。

関連する問題