2017-06-12 8 views
0

次のコードが期待される結果を返さない理由を理解しようとしています。メインindex.phpページのリンクをクリックすると、details.phpページが開きます。このページには、URLから情報を取得するサブページがあり、そのデータに基づいて画像を表示する必要があります。ただし、SQLクエリに2つ以上の行がある場合に限ります。PHPページが期待どおりに画像を返さない

私はSQLクエリを実行できます。変数$ pid、$ lvmID、$ inを削除して実際の値を挿入すると結果は返されます。このページは、2つ以上の結果が返された場合に結果を表示します。

マイコード:mysqli_fetch_assoc

<?php 
    if (!defined('DB_SERVER')) define('DB_SERVER', 'localhost'); 
    if (!defined('DB_USER')) define('DB_USER', 'xxx'); 
    if (!defined('DB_PASSWORD')) define('DB_PASSWORD', 'xxx'); 
    if (!defined('DB_TABLE')) define('DB_TABLE', 'xxx'); 


    // The procedural way 
    $mysqli = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE); 
    $mysqli->set_charset("utf8"); 
    $mysqli->query("SET NAMES 'utf8'"); 
    if (mysqli_connect_errno($mysqli)) { 
     trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR); 
    } 

    $pid = mysqli_real_escape_string($mysqli, $_GET['pid']); 
    $lvmID = mysqli_real_escape_string($mysqli, $_GET['lvmID']); 
    $in = mysqli_real_escape_string($mysqli, $_GET['in']); 

    $query = " 
       SELECT r.*, lvm.luchtvaartmaatschappijID 
       FROM tbl_random r 

       LEFT JOIN tbl_luchtvaartmaatschappij lvm 
       ON r.img_lvm = lvm.IATAcode 

       WHERE r.img_nmr ='$in' 
       AND lvm.luchtvaartmaatschappijID = '$lvmID' 
       AND r.randimgID != '$pid' 
       LIMIT 6"; 

    $result = mysqli_query($mysqli, $query) or trigger_error("Query Failed! SQL: 
    $query - Error: ". mysqli_error($mysqli), E_USER_ERROR); 

    $row = mysqli_fetch_assoc($result); 

    mysqli_close($mysqli); 

    ?> 

    <?php 
     $items_in_row = 3 ; 
     $index = 0 ; 
    ?> 

     <table width='100%' cellspacing='5' border='0'> 
      <tr> 

     <?php 
     while($row = mysqli_fetch_assoc($result)){ 
      $index++ ; ?> 
      <td style="text-align: center" width='375'>  

      <a href='http://globe-trekking.com/vg/home/details.php?pid=<?php echo $row['randimgID'];?>&lvmID=<?php echo $row['luchtvaartmaatschappijID'];?>&in=<?php echo $row['img_nmr'];?>'> <img src='http://globe-trekking.com/vg/img/random/<?php echo $row['img_lvm'];?>/<?php echo $row['img_file'];?>' width='345'></a> 


      <br> 
      </td> 
     <?php if ($index%$items_in_row == 0){ ?> 
      </tr> 
      <tr> 
     <?php } 
     } ?> 
     </tr> 
     </table> 

答えて

0

各呼び出しは、結果セットから1行を取り出します。

$row = mysqli_fetch_assoc($result); 

実際にクエリの結果から最初の行をフェッチします:

だけで、接続を閉じる前に、あなたはこのコールを持っています。検索結果から行をフェッチし、2行目がある場合、ループの内部を実行します

 while($row = mysqli_fetch_assoc($result)){ 

:次に、あなたはここであなたのwhile条件を持っています。したがって、クエリが返す最初の行はwhileループ内で決して処理されません。

溶液をmysqli_fetch_assoc()の最初の呼び出しを削除し、そしてこのような完全なコードままに単に:

<?php 
    if (!defined('DB_SERVER')) define('DB_SERVER', 'localhost'); 
    if (!defined('DB_USER')) define('DB_USER', 'xxx'); 
    if (!defined('DB_PASSWORD')) define('DB_PASSWORD', 'xxx'); 
    if (!defined('DB_TABLE')) define('DB_TABLE', 'xxx'); 


    // The procedural way 
    $mysqli = mysqli_connect(DB_SERVER, DB_USER, DB_PASSWORD, DB_TABLE); 
    $mysqli->set_charset("utf8"); 
    $mysqli->query("SET NAMES 'utf8'"); 
    if (mysqli_connect_errno($mysqli)) { 
     trigger_error('Database connection failed: ' . mysqli_connect_error(), E_USER_ERROR); 
    } 

    $pid = mysqli_real_escape_string($mysqli, $_GET['pid']); 
    $lvmID = mysqli_real_escape_string($mysqli, $_GET['lvmID']); 
    $in = mysqli_real_escape_string($mysqli, $_GET['in']); 

    $query = " 
       SELECT r.*, lvm.luchtvaartmaatschappijID 
       FROM tbl_random r 

       LEFT JOIN tbl_luchtvaartmaatschappij lvm 
       ON r.img_lvm = lvm.IATAcode 

       WHERE r.img_nmr ='$in' 
       AND lvm.luchtvaartmaatschappijID = '$lvmID' 
       AND r.randimgID != '$pid' 
       LIMIT 6"; 

    $result = mysqli_query($mysqli, $query) or trigger_error("Query Failed! SQL: 
    $query - Error: ". mysqli_error($mysqli), E_USER_ERROR); 

    mysqli_close($mysqli); 

    ?> 

    <?php 
     $items_in_row = 3 ; 
     $index = 0 ; 
    ?> 

     <table width='100%' cellspacing='5' border='0'> 
      <tr> 

     <?php 
     while($row = mysqli_fetch_assoc($result)){ 
      $index++ ; ?> 
      <td style="text-align: center" width='375'>  

      <a href='http://globe-trekking.com/vg/home/details.php?pid=<?php echo $row['randimgID'];?>&lvmID=<?php echo $row['luchtvaartmaatschappijID'];?>&in=<?php echo $row['img_nmr'];?>'> <img src='http://globe-trekking.com/vg/img/random/<?php echo $row['img_lvm'];?>/<?php echo $row['img_file'];?>' width='345'></a> 


      <br> 
      </td> 
     <?php if ($index%$items_in_row == 0){ ?> 
      </tr> 
      <tr> 
     <?php } 
     } ?> 
     </tr> 
     </table> 
+0

おかげ。完璧な意味合いがあります。私はあなたがそれを指摘したので私のエラーを参照してください。 –

関連する問題