查询输出数据两次

时间:2013-03-18 20:21:06

标签: php mysql arrays echo

我有以下代码段:

<?php
$query = mysql_query("SELECT * FROM users") or die(mysql_error());
echo "<table>";

while ($row = mysql_fetch_array($query))
{
    echo "<tr>";

    foreach($row as $value)
    {
        echo "<td>".$value."</td>";
    }

    echo "</tr>";

}

echo "</table>";?>

我认为这个片段应该从表中输出一次数据。问题是,我得到了两次。所以,例如

  

me@email.com me@email.com Joe Joe Bloggs Bloggs

为什么会这样做?

3 个答案:

答案 0 :(得分:6)

默认情况下,mysql_fetch_array同时执行数字和关联(MYSQL_BOTH),每个都有两个键。

如果您需要数字键,请使用

while ($row = mysql_fetch_array($query, MYSQL_NUM))

如果你想要关联数组,请使用:

while ($row = mysql_fetch_array($query, MYSQL_ASSOC))

另请注意,mysql_*函数已弃用,您应该使用MySQLi或PDO。

答案 1 :(得分:0)

更改您的代码:

while ($row = mysql_fetch_assoc($query)) {
...

AND ... mysql_ *函数已弃用,请考虑转移到mysqli_ *或PDO。

在那里,您将找到将一行或所有行提取到数组的可能性......

  • 仅限数字索引
  • 仅使用关联索引
  • 两者( - >你的情况下是&gt;双输出)

答案 2 :(得分:0)

MySQL Fetch Array

默认情况下,该函数使用MYSQL_BOTH,它将为您提供关联数组和编号数组。例如:

表:

name | emai
joe     joe@email.com

返回的数组将具有

$row{
    [0] = "joe",
    ['name'] = "joe",
    [1] = "joe@email.com",
    ['email'] = "joe@email.com",
    }

您必须使用MYSQL_ASSOCMYSQL_NUM作为第二个参数

注意:不要使用MySQL_ *函数,因为它们自PHP 5.5起已被弃用。请改用PDO或MySQLi_ *