2016-05-12 91 views
0

我的工作上面的代碼:mysqli的查詢結果正確數量的元素,但空值

<section id="home" style="display:normal;" data-state="active"> 
<!-- // tabella con tutte le annate disponibili su dB --> 
<?php 
    $query = "SELECT year(dataGranpremio) as anno 
       FROM Granpremi 
       GROUP BY YEAR (dataGranpremio)"; 
    $res = mysqli_query($db_connection, $query); 
    if (!$res) { 
     die ("Errore nella query " . mysqli_error($db_connection)); 
    } 
    $numero = mysqli_num_rows($res); 
    <h2>HOME</h2> 
    <table width="950" border="1"> 
    <?php $counter=0; 
    while ($counter<$numero) { // ciclo while 
      $countcolumns=0;?> 
      <tr> 
      <?php while ($ris=mysqli_fetch_array($res) && $countcolumns<$columns) {?> 
       <td> 
        <?php print($ris);?> 
       </td> 
       <?php $counter++; 
       $countcolumns++; 
       }?> 
      </tr> 
    <?php }?> <!--// fine ciclo--> 
    </table> <!--//chiusura tabella--> 
    <?php }// fine if numero 
    else { ?><p>ERRORE accesso al DB</p><?php } 
    mysqli_close($db_connection);?> 
</section> 

這一部分應該顯示Granpremi表內的所有年份的清單: Granpremi {ID(INT),dataGranpremio (日期)}; 我試過查詢,它的工作原理,但是當我運行這段代碼時,它顯示了正確的數值但空。 之前,它的工作由MySQL我試圖移動到mysqli來解決這個問題,但沒有任何改變。 有人可以幫我解決嗎? 謝謝你們。

+0

解決 我以這種方式設置好的循環 '而($ RIS = mysqli_fetch_array($ RES)&& $ countcolumns <$列)' 以正確的方式是: '而($ countcolumns <$列) $ ris = mysqli_fetch_array($ res); ....}' – Maghez

回答

0

我覺得你的方式過於複雜這

你有你的循環內循環。

while ($counter<$numero) { // ciclo while 
     $countcolumns=0;?> 
     <tr> 
     <?php while ($ris=mysqli_fetch_array($res) && $countcolumns<$columns) {?> 
      <td> 
       <?php print($ris);?> 
      </td> 
      <?php $counter++; 
      $countcolumns++; 
      }?> 
     </tr> 
<?php }?> 

你內環它通過在你的SQL結果集中的每條記錄循環(多年列表)會前外環循環一次,以充分執行。因此,您最終會得到一個表,其中包含與結果集一樣多的記錄,以及與結果集中有記錄一樣多的字段。

此外,你在內部循環(正確的循環結果集中的記錄)中有條件檢查columncounter<columns,但你從未設置$columns,所以每次都會失敗。你根本不會循環訪問你的記錄集。因爲您已經知道您的列數,所以我無法弄清楚爲什麼您有此檢查。它是1.你的SQL只有一個字段。

最後,我相信mysqli_fetch_assoc()是更好的選擇。

你可以把它轉換成單行,多領域(水平佈局):

<h2>HOME</h2> 
<table width="950" border="1">  
    <tr> 
    <?php while ($ris=mysqli_fetch_aassoc($res)) {?> 
     <td> 
      <?php print($ris["anno"]);?> 
     </td> 
    <?php } ?>    
    </tr>  
</table> <!--//chiusura tabella--> 

如果,而不是一個水平列表,爲您的你想要一個垂直列表(多行,和一列),你可以使用:

<h2>HOME</h2> 
<table width="950" border="1">   
    <?php while ($ris=mysqli_fetch_assoc($res)) {?> 
     <tr><td> 
      <?php print($ris["anno"]);?> 
     </td></tr> 
    <?php } ?>    
</table> <!--//chiusura tabella--> 

如果我們只是移動<tr>您記錄環路設置成每個記錄生成一個新錶行內。

+0

對不起,你是對的;我刪除了部分代碼,有一個開關用於確定結果tablse的大小。無論如何,我嘗試了你的建議,但沒有發生。 結果仍然是一個元素正確數目的表格,但所有值均爲「1」 – Maghez