如何阻止MySQL复制返回数组中每列的条目?

时间:2010-09-14 16:57:50

标签: php mysql arrays pdo

我的MySQL查询正在返回带有重复条目的数组:编号键和带有相同数据的标记键。这可能是标准的,但它似乎是浪费,如果我打印价值,可能会导致问题。我的意思是,显然不是一个大问题。但我只是好奇我是否可以阻止它。这似乎没必要。例如:

Array(
    [0] => "Ted",
    [first_name] => "Ted",
    [1] => "Schmidlap",
    [last_name] => "Schmidlap"
)

等等。

我对很多这方面都很陌生,所以这可能是一个简单的问题,但Google搜索似乎对我没有任何答案。谁知道发生这种情况的原因?我现在正在使用PHP的PDO,但之前我正在通过MySQL函数直接进行,同样的事情正在发生,所以我认为它是MySQL交互的副产品。

我可以迭代并取消设置数字,因为我不需要它们,但它们现在不是真正的方式,所以这只是一个额外的步骤。不过,有没有办法在第一时间没有取出它们?

4 个答案:

答案 0 :(得分:2)

大概这是在您使用mysql_fetch_array(或类似)之后发生的。

您需要添加一个标志来指定要返回的数组类型,或者PHP假定两者都是。

即。 mysql_fetch_array($result_set, MYSQL_ASSOC|MYSQL_NUM|MYSQL_BOTH)

答案 1 :(得分:1)

这取决于您使用的功能。 有些函数返回两种类型,其他函数只返回其中一种。

如果您使用PDOStatement->fetch,请注意所需的optional $fetch_style argument

答案 2 :(得分:1)

您的问题在于mysql_fetch_array功能。

如果您只想要数字,请使用:

$row = mysql_fetch_array($result, MYSQL_NUM)

如果您只想要文本索引,请使用:

$row = mysql_fetch_array($result, MYSQL_ASSOC)

我通常使用MySQLi但是对于PDO,您可以在此处找到更多信息:http://us3.php.net/manual/en/pdostatement.fetch.php

这似乎意味着你应该将它用于文本索引:

$row = $statement->fetch(PDO::FETCH_ASSOC);

这适用于数字索引:

$row = $statement->fetch(PDO::FETCH_NUM);

答案 3 :(得分:0)

另外,只是要注意这一点,因为它没有在这里列出,如果你想要一个关联数组,你可以使用mysql_fetch_assoc(),或者你想要一个枚举(编号)数组使用mysql_fetch_row()而不是mysql_fetch_array() 。我之所以使用它,主要是因为没有它,我会经常忘记旗帜,所以我养成了使用特定功能的习惯。