2010-09-14 38 views
1

我的MySQL查询正在返回具有重复条目的数组:数字键和带有相同数据的标记键。这可能是标准的,但它看起来很浪费,而且如果我打印价值的话可能会导致问题。我的意思是,显然不是一个大问题。但我只是好奇,如果我能阻止。这似乎没有必要。例如:如何阻止MySQL复制返回数组中的每一列条目?

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

依此类推。

我对此很感兴趣,所以这可能是一个简单的问题,但谷歌似乎没有任何答案。任何人都知道这发生的原因?我现在正在使用PHP的PDO,但是我之前正在通过MySQL函数直接进行,并且发生了同样的事情,所以我认为这是MySQL交互的副产品。

我可以遍历并取消设置数值,因为我不需要它们,但它们现在并不是真的,所以这只是一个额外的步骤。不过,有没有办法让他们在第一时间获取?

回答

1

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

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

+0

谢谢!这就是我一直在寻找的。 – 2010-09-14 17:25:23

2

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

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

mysql_fetch_array($result_set, MYSQL_ASSOC|MYSQL_NUM|MYSQL_BOTH)

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); 
+0

谢谢!你们都告诉了我我需要知道的事情。实际上,我一直在阅读PDO的介绍,并提到了FETCH_ASSOC,但我无法在该术语中找到任何明确的参考。这是你和luiscubal发布的链接。 – 2010-09-14 17:24:44

0

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

相关问题