0

我有以下片段:

<?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 乔乔博客博客

为什么它会这样做?

4

3 回答 3

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。

于 2013-03-18T20:22:26.823 回答
0

更改您的代码:

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

并且... mysql_* 函数已弃用,请考虑迁移到 mysqli_* 或 PDO。

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

  • 仅使用数字索引
  • 仅具有关联索引
  • 两者都有(--在你的情况下是双输出)
于 2013-03-18T20:25:46.440 回答
0

MySQL 获取数组

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

桌子:

name | emai
joe     joe@email.com

返回的数组将有

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

您将不得不使用MYSQL_ASSOCorMYSQL_NUM作为第二个参数

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

于 2013-03-18T20:26:41.777 回答