2011-11-27 113 views
-2

我正試圖通過以下代碼循環遍歷MySQL中的行。不幸的是,mysql_fetch_row函數只返回我的查詢的第一行(我用print_r證實了這一點)。當我使用mysql_num_rows時,它返回該查詢的正確行數(2)。任何想法爲什麼mysql_fetch_row只返回第一行?mysql_fetch_row沒有返回完整數組

$query = 'SELECT firstName FROM profiles WHERE city="Phoenix" and lastName ="Smith"'; 
$result = mysql_query($query); 
$row = mysql_fetch_row($result); 
print_r($row); //This returns only 1 array item: Array ([0] => John) 

$a=mysql_num_rows($result); 
print_r($a); //This returns 2 

我也在MySQL中運行相同的查詢,並返回兩行(「John」和「Jim」)。

感謝您的幫助。

+1

感謝您的回覆。忘記了mysql_fetch_row一次只返回1行。使用while循環工作完美。 – user732027

+1

如果某個特定答案爲您提供了此答案,則應將該答案標記爲已接受(單擊答案左側的綠色複選框)。 – casperOne

回答

3

只需執行兩次(或循環)mysql_fetch_row。根據定義(如果您閱讀文檔),它一次只返回一行。所以:

while ($row = mysql_fetch_row($result)) { 
    var_dump($row); 
} 
2

您希望把它放在一個while循環:

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

    $firstName = $row['firstName']; 

    echo("$firstName<br />"); 

} 

這樣做是爲每個結果(行)發現,它獲取你想要的數據並顯示。因此,它得到第一個結果,顯示名稱,循環回到頂部,獲取第二個結果,顯示該名稱等,然後一旦沒有更多匹配查詢條件的結果,while循環結束。

+0

爲什麼你在變量名周圍放上''''echo $ firstName;'更短,更易讀 – zerkms

+0

壞習慣比什麼都重要:/ – Joe

1

PHP按照它們如何緩衝的順序訪問SQL結果。你需要運行一個循環來訪問所有的內容。

如果你希望一切都加載到一個數組:

$allRows=array(); 
while($row=mysql_fetch_assoc($result) { 
    $allRows[]=$row; 
} 
+0

我不確定說「緩衝」是個好主意。結果可以按照mysql返回的順序訪問 - 這就是imho更好 – zerkms

+0

mysql_query()函數會在提供對PHP句柄的訪問權限之前緩存所有結果,只要第一行可用,mysql_unbuffered_query()就會提供訪問權限,然後當後續的行可用時,這就是我的意思是它們如何被緩衝。 – matsko

+0

正如我所說 - 沒有理由甚至提及**當前的PHP實現**。明天它*可以改變*。不會改變的是「數據以確切的順序返回mysql返回它」 – zerkms

1

您可以使用以下任何一個:

​​

while ($row = mysql_fetch_assoc($result)) 
{ 
    echo $row['firstName']; 
} 

while ($row = mysql_fetch_object($result)) 
{ 
    echo $row->firstName; 
}