如果fieldname为0,PHP Mysql_fetch_array将失败

时间:2011-03-08 19:15:41

标签: php mysql

使用mysql_fetch_array()进行简单查询 -

SELECT id, name, roll FROM student

我得到了>

Array (
    [0] => 1
    [id] => 1
    [1] => sam
    [name] => sam
    [2] => 5
    [roll] => 5
)

但是,如果我用0->

替换roll
SELECT id, name, 0 FROM student

它发送 - >

Array (
    [0] => 0
    [id] => 1
    [1] => sam
    [name] => sam
    [2] => 0
)

'id'给出'0'。而查询在mysql中运行良好。

是mysql_fetch_array的错误吗?

4 个答案:

答案 0 :(得分:2)

这不是一个错误。密钥为0的数组值正在被覆盖。

由于您没有为具有常量值0的列指定任何别名,因此其列名将为0。当此列名成为数组中的键时,将使用键0覆盖已存在的值。

[0] => 1      // for id
[id] => 1 

[1] => sam    // for name
[name] => sam 

[0] => 0     // for 0 .. THIS WILL OVERWRITE.

解决此问题的最简单方法是提供列别名:

SELECT id, name, 0 AS FOO FROM student

答案 1 :(得分:2)

mysql_fetch_array有两个参数。你用第二个信号表示你想要得到你的结果。

MYSQL_ASSOC将为您提供带字段名称的关联数组(如果您决定将其用作字段名称,则为0)。你会得到:

Array ( [id] => 1 [name] => sam [roll] => 5 )

MYSQL_NUM会按照您要求的顺序为数字编制索引。你会得到:

Array ( [0] => 1 [1] => sam [2] => 5 )

MYSQL_BOTH是默认设置,它会以两种方式填充数组,并且会使这样的事情复杂化。

答案 2 :(得分:0)

您应该使用mysql_fetch_assoc代替。

答案 3 :(得分:0)

另一种解决方案是将您的查询更改为:

SELECT id, name, 0 AS zero FROM student