1

2 つのページで同じ while ループを使用していますが、唯一の違いは各ページで異なる SQL 呼び出しです。1 つ目は、クエリからコンテンツを取得してイメージ スライダーに表示することで、正常に機能します。

  <?php

            $qry = mysql_query(sprintf("SELECT * FROM manageme WHERE element IN ('%s')", $element));
            $i = 0;
            while (($t = mysql_fetch_array($qry)) != null && $i < 52) { $i++;?>
                <li>


                    <a href="">                                                           
                        <img src="<?php print $t['fileLocation']; ?>"; 
                        title="<?php print $t['element_name']; ?>"; 
                        name="<?php print $t['clickLocation']; ?>";
                        alt="wat" 
                        class="btnshow" />
                    </a>
                </li>
<?php } ?>

これは、返されるエントリが 52 未満である限り、ループをステップ実行してクエリからコンテンツを取得し、各レコードが 1 回表示されると終了するため、機能します。

別の SQL 呼び出しで同じ while ループを実装すると、問題が発生します。

      <?php

$qry = mysql_query(sprintf("SELECT u.username, us.user_id, us.service_id,
                                        s.imageID, s.title, s.clickLocation, s.fileLocation, s.element_name
                                        FROM user u, user_service us, manageme s
                                        WHERE us.user_id = %s
                                        AND s.imageID = us.service_id", $_COOKIE['user_id']));
            $i = 0;
            while (($t = mysql_fetch_array($qry)) != null && $i < 52) { $i++;?>
                <li>


                    <a href="">                                                           
                        <img src="<?php print $t['fileLocation']; ?>"; 
                        title="<?php print $t['element_name']; ?>"; 
                        name="<?php print $t['clickLocation']; ?>";
                        alt="wat" 
                        class="btnshow" />
                    </a>
                </li>
<?php } ?>

コンテンツが 1 回表示されたときに配列から取得して while ループを終了する代わりに、52 個のエントリが表示されるまでイメージ スライダーのコンテンツをループし続けます。たとえば、SQL 呼び出しでイメージ スライダーに表示するレコードが 4 つしか見つからない場合、4 つのセットはループを終了する前に 13 回 (52/4) 表示されます。

データベースから各レコードを一度だけ表示した後、このループを終了する方法を誰かが理解するのを手伝ってくれますか? 前もって感謝します!

4

5 に答える 5

1

クエリに追加LIMIT 52してみて、whileループを次のように実行します。

  while ($t = mysql_fetch_array($qry)) {
  //do something
  }
于 2012-11-09T15:01:19.300 に答える
0

主な問題:

1) SQL インジェクション攻撃に対して脆弱。サーバーが破壊されるのを楽しんでください。

2)用語:「配列から」フェッチしていません。結果セットからデータ行をフェッチし、その行を配列として返します。

3) while() 条件で醜い構文を使用している場合でも、ループは 52 レコードまたはそれ以上のレコードが使用できなくなった後に終了する必要があります。クエリが正しいレコードを期待どおりの順序/形式で実際に取得していることを確認してください。コードには、PHP が「重複」行を出力する原因となるものは何もありません。

于 2012-11-09T14:58:31.420 に答える
0

mysql_num_rows($qry)に加えて、ループを終了するために使用します< 52

何かのようなもの:

 (($t = mysql_fetch_array($qry)) != null && ($i < mysql_num_rows($qry) || $i < 52))
于 2012-11-09T14:58:41.040 に答える
0

マニュアルから、への呼び出しがmysql_fetch_array($qry)null を返すことはないようです。結果セットの最後に戻り値がfalse返されます。これを確認するために条件を変更すると、ループを終了できるはずです

于 2012-11-09T14:59:50.847 に答える
0

$i < 52チェックを取り除きます。LIMIT 52代わりに、SQL クエリの最後に追加してください。次に、while ループを次のように変更します。

while ($t = mysql_fetch_array($qry)) {
....
}
于 2012-11-09T15:00:05.707 に答える