只是尝试不同的功能,在继续自学之前尝试尽可能多地学习它们。有人可以解释一下下面发生了什么吗? (请忽略查询未准备好或根本不安全)
$query = "SELECT userid FROM users_groups_memberships WHERE groupid='".$GroupID."'";
$result = $mysqli->query($relationshipQuery);
while($row = $relationshipResult->fetch_row()) {
$existingMembers[] = $row;
}
$memberString = implode(', ', $existingMembers);
echo $memberString;
我期待一个逗号分隔的数字列表,如
1, 4, 6, 88, 100
但我实际上得到 Array, Array, Array, Array, Array
。
我知道这非常简单,因为我之前曾返回过
array
,我记得那是因为我做了一些愚蠢的事情,我只是不记得是什么!
我实际上正在尝试使用
$existingMembers
来查看 in_array
中是否存在另一个变量值,但我总是得到 0,可能是因为这些值也在那里 array
。
$row
是从查询返回的列的数组。
print_r($row)
将显示您添加的内容。
尝试:
while($row = $relationshipResult->fetch_row()) {
$existingMembers[]=$row['userid'];//Or $row[0] depending on the format of $row
}
每一行都是一个数组,内爆不会在二维中连接。
如果您希望执行您建议的输出,请尝试将循环中的语句更改为:
$existingMembers[] = $row['userid'];
我知道我发布这个答案有点晚了,但是何时使用不同
fetch_*
函数的用例似乎有点脱节和不清楚。我将根据您的示例片段和一些可能的替代方案探索解决方案:
while($row = $relationshipResult->fetch_row()) {
$existingMembers[]=$row[0];
}
fetch_row()
的文档。 fetch_row()
将结果行作为 枚举数组 返回(即 $row[0]
、$row[1]
等)。
处理枚举数组有时可能会令人困惑。您可以使用几种替代方法来避免编号索引的混乱。
替代方案1:
while($row = $relationshipResult->fetch_assoc()) {
$existingMembers[]=$row['userid'];
}
在此示例中,结果行作为关联数组返回。这使得编码更干净、更容易理解,因为它允许您使用请求的字段名称作为数组索引。在您的示例中,SQL 查询中的字段名称
userid
成为关联数组中的键,可以使用上述表示法进行访问。
fetch_assoc()
。
替代方案2:
while($row = $relationshipResult->object()) {
$existingMembers[]=$row->userid;
}
在此示例中,结果行作为对象返回。同样,这使得编码更加清晰和易于理解,因为它允许您使用请求的字段名称作为对象属性。在您的示例中,SQL 查询中的字段名称
userid
成为对象属性,可以使用上述表示法进行访问。
fetch_object()
。
回顾一下,这些是与
fetch_*
相关的 mysqli_*
函数的具体用例。何时使用特定功能的用例以前似乎有点不清楚。我希望这有助于澄清这一点。
祝你好运,编码愉快! :)
尝试 fetch_field() 相反,我认为它会返回字段的值。 我认为 fetch_row 正在为您提供数组('userid'=>1)
改变
$existingMembers[]=$row;
到
$existingMembers[]=$row['userid];