为什么mysql_fetch_array会输出多个重复的结果

时间:2017-02-22 08:26:44

标签: php mysql

从这个简单的查询中,我无法弄清楚为什么我在[0]中获得重复结果,在[m_id]中获得另一个结果。我相信给定查询的结果必须只显示两个值。

$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
    )

有人可以告诉我我做错了什么。 谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

mysql_fetch_array的说明如下:

  

数组mysql_fetch_array(resource $ result [,int $ 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);