2017-02-22 103 views
1

從這個簡單的查詢中,我無法弄清楚爲什麼我在[0]和另一個[m_id]中獲得重複結果。我相信給定查詢的結果必須只顯示兩個值。爲什麼mysql_fetch_array輸出多個重複結果

$sql="SELECT m.m_id, m.work FROM mun as m WHERE m.mun_id=7 "; 
$rslt=mysql_query($sql); 
$result=mysql_fetch_array($rslt); 
print_r($result); 

輸出:

Array 
    (
     [0] => 7 
     [m_id] => 7 
     [1] => 260 
     [work] => 260 
    ) 

有人可以理解我什麼,我做錯了。 謝謝。

+4

a)**不要**使用mysql--它已被棄用,並在PHP7中被刪除。改用mysqli或PDO。 b)你沒有做錯什麼,你只是得到關聯*和*數字指標。該修補程序正在使用[mysql_fetch_assoc](https://secure.php.net/manual/en/function.mysql-fetch-assoc.php),但又是:*切換到mysqli或PDO * –

+0

是啊謝謝你的建議。 – nas

回答

4

這是mysql_fetch_array的正常行爲。它提供數字和聯想指數。

如果你想只是其中之一,使用mysql_fetch_assocmysql_fetch_row

$result=mysql_fetch_row($rslt); 

Array 
    (
     [0] => 7 
     [1] => 260 
    ) 

$result=mysql_fetch_assoc($rslt); 

Array 
    (
     [m_id] => 7 
     [work] => 260 
    ) 

另外值得一提的是,你可以通過第二個參數得到使用mysql_fetch_array這種行爲。

// same as mysql_fetch_row 
$result=mysql_fetch_array($rslt, MYSQL_NUM); 

// same as mysql_fetch_assoc 
$result=mysql_fetch_array($rslt, MYSQL_ASSOC); 

更多信息:http://php.net/manual/en/function.mysql-fetch-array.php

2

mysql_fetch_array的描述如下:

陣列mysql_fetch_array(資源$結果[摘要$ result_type的= MYSQL_BOTH ])

其中第二可選參數是:

類型陣列的那就是被取出。它是一個常量,可以取下列值:MYSQL_ASSOC,MYSQL_NUM和MYSQL_BOTH。

而關於返回值:

類型返回數組的依賴於result_type的是如何定義的。通過使用MYSQL_BOTH(默認),您將得到一個包含關聯和數字索引的數組。使用MYSQL_ASSOC,你只能得到關聯索引(如mysql_fetch_assoc()工作),使用MYSQL_NUM,你只能得到數字索引(如mysql_fetch_row()工作)。

它被引用自http://php.net/manual/en/function.mysql-fetch-array.php

因此,在您的情況下,應用了默認MYSQL_BOTH。我敢肯定,以下必須解決:

$result=mysql_fetch_array($rslt, MYSQL_ASSOC); 

$result=mysql_fetch_array($rslt, MYSQL_NUM);

+0

謝謝,我現在非常清楚。 – nas