2012-10-11 31 views
0

返回最近的行我有一個MySQL類和我通過返回他們的方法獲取Mysql的行:mysql的獲取回報只是在

public function fetch_assoc($result_set){ 
    return mysql_fetch_assoc($result_set); 
    } 

出於某種原因,當我嘗試它只返回一個結果迭代通過我已經實例化的對象的方法返回。

while ($row = $a->fetch_assoc($result_set){ 
    ... 
    } 

雖然做舊的方式方法的作品,並給了我所有的行

while($row = mysql_fetch_array($result_set)){ 
     $row['0']; 
    } 

任何想法?

+0

有趣。你有沒有嘗試在返回之前將結果複製到var? ($ result_set){ $ row = mysql_fetch_assoc($ result_set); return $ row; } –

+0

這與問題並不完全相關。但是如果你正在編寫新的代碼,你可能不想使用已棄用的mysql API。有更好的選擇。 PDO:http://php.net/manual/en/book.pdo.php MySQL改進:http://php.net/manual/en/book.mysqli.php –

+0

順便說一句,也許這只是一個副本/粘貼錯誤,但是在'while'循環中缺少括號。 while($ row = $ a-> fetch_assoc($ result_set){'should be'while($ row = $ a-> fetch_assoc($ result_set)){'。 –

回答

1

這是因爲mysql_fetch_assoc只返回一個結果並將指針移動到下一個。因此,在每次迭代時,返回值都會移動指針,並在達到結果末尾時返回false。

您可以修改你的方法這種方式,使其工作:

public function fetch_assoc($result_set){ 
    $resultArray = array(); 
    while ($row = mysql_fetch_assoc($result_set){ 
     $resultArray[] = $row; 
    } 
    return $resultArray; 
} 

而且你可以使用數據像這樣:

foreach ($obj->fetch_assoc($result_set) as $row){ 
    echo $row['stuff']; 
} 

注意,在這種情況下$obj->fetch_assoc($result_set)返回所有的結果,我只是使用foreach循環遍歷它;

+0

更好的方法是將結果集建模爲迭代器,它可以在迭代時調用fetch函數 – Sven

+0

@Sven如果是這種情況,可能會堅持使用'mysql_fetch_assoc' – Ibu

+0

似乎他知道'mysql_fetch_assoc'只能一次讀取一行,他有一個'while循環來獲取所有元素,但他說它仍然不起作用,這讓我懷疑他的$ result_set變量是否沒有被額外的間接層正確修改。 –