我有以下代码段:
<?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
为什么会这样做?
答案 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。
在那里,您将找到将一行或所有行提取到数组的可能性......
答案 2 :(得分:0)
默认情况下,该函数使用MYSQL_BOTH
,它将为您提供关联数组和编号数组。例如:
表:
name | emai
joe joe@email.com
返回的数组将具有
$row{
[0] = "joe",
['name'] = "joe",
[1] = "joe@email.com",
['email'] = "joe@email.com",
}
您必须使用MYSQL_ASSOC
或MYSQL_NUM
作为第二个参数
注意:不要使用MySQL_ *函数,因为它们自PHP 5.5起已被弃用。请改用PDO或MySQLi_ *