我有这个 SQL 命令:
SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10
当我在 PHPMyAdmin 上运行该命令并替换一些有效值而不是
$Username
时,我得到以下结果:
+----------+
| Username |
+----------+
| johndoe |
+----------+
但是当我编写这样的函数时:
function userParent($Username)
{
global $con;
$Result = mysqli_query($con, "SELECT Username FROM Family WHERE Parent = '$Username' LIMIT 10");
$Result = mysqli_fetch_array($Result);
return $Result;
}
我得到这个数组作为回报:
Array ( [0] => johndoe [Username] => johndoe )
因此,当我使用这样的 foreach 循环在脚本中调用该函数时:
$Parent = userParent('james');
foreach ($Parent as $value){
echo $value . '<br>';
}
输出中总是有重复的“johndoe”。
我相信这个重复数据是由
mysqli_fetch_array
引起的。如何从输出中删除这些重复数据?
mysqli_fetch_array()
返回 MySQL 结果的关联数组和基于数字的数组。请使用 mysqli_fetch_assoc()
来代替。
这不是骗局,它记录在http://php.net/mysqli_fetch_array。默认情况下,该函数返回一个双键数组(数字+字符串)。如果您只想要一种类型,请使用特定的
mysqli_fetch_row() [numeric only]
mysqli_fetch_assoc() [keyed only]
or
mysqli_fetch_array($result, $fetch_mode);
参见
mysqli_fetch_assoc
。该函数省略了数字索引数组部分。
检查文档:http://php.net/manual/en/mysqli-result.fetch-array.php,它返回了它应该返回的内容。
默认情况下,它使用
MYSQLI_BOTH
,因此数组具有 both* 数字键和关联键。 将 MYSQLI_ASSOC
或 MYSQLI_NUM
作为第二个参数传递给 mysqli_fetch_array
以仅获取一种索引类型。
$Result = mysqli_fetch_array($Result, MYSQLI_NUM);