2011-08-09 70 views
2

好吧,我有以下代碼:mysql_fetch_array只返回一行

$array = mysql_query("SELECT artist FROM directory WHERE artist LIKE 'a%' 
     OR artist LIKE 'b%' 
     OR artist LIKE 'c%'"); 
    $array_result= mysql_fetch_array($array); 

然後,當我嘗試呼應的內容,我也只能隨聲附和$array_result[0];,它輸出的第一個項目,但如果我嘗試回聲$array_result[1];我得到一個未定義的偏移量。

但是,如果我通過PHPMyAdmin運行上述查詢,它將返回一個包含10個項目的列表。爲什麼這不被識別爲10個項目的數組,允許我回顯0-9?

感謝您的幫助。

+0

我知道'%'是通常的通配符,但是您是否嘗試過使用'*'來代替? – JMichelB

回答

17

這是因爲數組表示返回的結果集中的單個行。您需要再次執行mysql_fetch_array() function以獲取下一條記錄。例如:

while($data = mysql_fetch_array($array)) { 
    //will output all data on each loop. 
    var_dump($data); 
} 
+0

謝謝一堆。 奇怪的是,當我使用它時,它並沒有得到第一行數據的值。即說第一個藝術家是蘋果,第二個是香蕉,第三個是香瓜。 當我var轉儲,它只是香蕉 - >香瓜 - >等,沒有蘋果。 – Ando

+0

@Ando:當你使用PMA(PhpMyAdmin)時它會得到'apple'嗎?可能是:(1)您的php生成的SQL查詢不會適當地過濾記錄。 (2)你不是'ORDER BY',而是'LIMIT',因此在過濾時可能會留下'apple'的記錄。 – Dor

+0

我的SQL查詢確實帶回了Apple,並且我執行了ORDER BY藝術家ASC。有什麼特別的是,如果我ORDER BY desc,那麼它顯示蘋果在底部,但它是缺少應該是第一個項目...非常奇怪 – Ando

4

您應該使用while來獲取所有數據。

$array_result = array(); 
while ($row = mysql_fetch_array($array, MYSQL_NUM)) { 
    $array_result[] = $row; 
} 
echo $array_result[4]; 
+1

無論如何,數據都存儲在PHP的內存空間中。複製該數據通常是無用的。 – Dor

+0

@我沒有看到如何將數據移入數組無用。你還有什麼要訪問數據?假設你需要這兩行,你不能在while循環的同一次迭代中獲得它們,所以首先將數據複製到一個可用數組將是一個好主意。 –

+0

@DaveChen我認爲你是對的。這感覺像是一個PHP的缺點。 – Anthony

1

我更喜歡使用此代碼:

$query = "SELECT artist FROM directory WHERE artist LIKE 'a%' 
     OR artist LIKE 'b%' 
     OR artist LIKE 'c%'";   
$result = mysql_query($query) or die(mysql_error()); 


while(list($artist) = mysql_fetch_array($result)) 
{ 
echo $artist; 
} 

如果你添加更多的字段來查詢只需添加更多變數列表($藝術家,$ FIELD1,$場2等。 )
我希望它有幫助:)

+0

或者:while($ data = mysql_fetch_assoc($ result)){extract($ data); /*...*/}'。請參閱:http://php.net/manual/en/function.extract.php – Dor