2012-09-11 61 views
0

大家好!MySQL/PHP mysql_fetch_array()不斷丟失第一行

由於某些原因,Database :: fetchArray()正在跳過查詢結果集的第一行。

它正確地打印所有的行,只是由於某種原因不斷丟失第一個,我認爲我的fetchArray()函數有問題嗎?

我在phpMyAdmin中運行了查詢,它返回了4行,當我在本地主機上使用php文件(代碼如下)嘗試它時,它只使用相同的'WHERE tunes.riddim'-value of course創建3行。 google上大多數類似的主題表明,一個常見的錯誤是在while()之前使用mysql_fetch_array(),它將指針設置在前面並導致第一行丟失,不幸的是我只有一個mysql_fetch_array()調用而() - 頭)。

<?php 

    $db->query("SELECT " . 
       "riddims.riddim AS riddim, " . 
       "riddims.image AS image, " . 
       "riddims.genre AS genre, " . 
       "tunes.label AS label, " . 
       "tunes.artist AS artist, " . 
       "tunes.tune AS tune, " . 
       "tunes.year AS year," . 
       "tunes.producer AS producer " . 
       "FROM tunes " . 
       "INNER JOIN riddims ON tunes.riddim = riddims.riddim " . 
       "WHERE tunes.riddim = '" . mysql_real_escape_string(String::plus2ws($_GET['riddim'])) . "'" . 
       "ORDER BY tunes.year ASC"); 

    $ar = $db->fetchArray(); 

    for($i = 0; $i < count($ar) - 1; $i++) 
    { 
     echo $ar[$i]['riddim'] . " - " . $ar[$i]['artist'] . " - " . $ar[$i]['tune'] . " - " . $ar[$i]['label'] . " - " . $ar[$i]['year'] . "<br>"; 
    } 

?> 

數據庫:: fetchArray()看起來像:

public function fetchArray() 
{ 

    $ar = array(); 

    while(($row = mysql_fetch_array($this->result)) != NULL) 
     $ar[] = $row; 

    return $ar; 
} 

任何建議表示讚賞!

+0

是的,你是不是失蹤的第一行,但最後一行.. – dbf

+0

您需要($ i = 0'之間進行選擇; $ I <=(計數($ ar) - 1); $ i ++)'和'for($ i = 0; $ i

回答

3

您應該刪除從-1 for循環

+2

不會錯過第一行,但最後一行.. – dbf

+0

哦,親愛的......我早先弄亂了for循環,並改變了停止標準..我想我可能會在錯誤的函數中尋找另外3個小時來尋找bug。謝謝! – phew

0

你也可以使用一個簡單的foreach

foreach($db->fetchArray() as $row) 
{ 
     echo $row['riddim'] # ... 
} 

它會讓你的代碼更易讀了。

0

的問題在你的while循環:

for($i = 0; $i < count($ar) - 1; $i++) 

如果count ($ar)爲1,因爲有一個條目,你的循環將永遠不會被調用;嘗試調整檢查部分:

for($i = 0; $i < count($ar) ; $i++)