2010-08-27 50 views
0

这里是我的代码如何从mysql_fetch_array()获取正确的列数?

while($row = mysql_fetch_array($result)) 

行我想有多少列的一行。我试过count($row),但这返回了我认为是整个$结果的单元格数量。

即居然有7列,2行和count($row)返回14.我想,这将返回7.

你能看到我要去哪里错了一个功能。

在此先感谢。

编辑 - 答发现

传递MYSQL_NUM作为第二个参数mysql_fetch_array
无论如何感谢大家的答案。

+0

你应该接受John Kugelman的回答,因为他正确地描述了你为什么看到结果以及解决方案。 – Josh 2010-08-27 22:22:34

回答

2

当您使用mysql_fetch_array时,每行的索引列有两次,一次按列号和一次按列名。所以count($row)将是列数的两倍。

如果您只需要数字索引,请使用mysql_fetch_row,如果您需要名称索引,请使用mysql_fetch_assoc。这些函数将返回具有7个条目的行。

3

PHP有一个返回的列数的函数:

mysql_num_fields($result) 

至于其他的答案说,你得到双倍计数,因为mysql_fetch_array()同时返回关联键(按列名)和数字键。不过我会用上面的函数,而不管我用什么来获取我的行。

2

mysql_fetch_array()将该行作为数字索引和关联关键字的组合数组返回。这就是为什么你得到14而不是7。

改为使用mysql_fetch_row()来获取下一行作为数字索引。或mysql_fetch_assoc()以获得与关联密钥。更改为任何一个会引起count($row)返回7

编辑我原来说mysql_fetch_array()返回整个结果。我纠正了这一点。问题仍然存在:使用我提到的其他功能之一将解决问题。

+0

这是不正确的...... mysql_fetch_array()将“作为关联数组或数组数组获取结果行”。它返回一行,但默认情况下会返回按数字和列名称索引的列,因此每列都列出两次。 – Josh 2010-08-27 22:19:38

+0

如果我对你编辑的答案进行upvote并导致你失去了令人垂涎的1337-rep标记,你会原谅我吗? – BoltClock 2010-08-28 03:08:02

+0

@BoltClock:大声笑,不要继续。我会争取31337 :) – Cfreak 2010-08-28 03:18:43

相关问题