只是玩弄不同的功能,在我继续自学之前,尽可能多地学习它们。有人可以解释一下下面发生了什么吗? (请忽略该查询未准备好或完全安全)
$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
。
提前感谢任何支持:)
答案 0 :(得分:2)
$row
是查询返回的列数组。
print_r($row)
会显示您的添加内容。
尝试:
while($row = $relationshipResult->fetch_row()) {
$existingMembers[]=$row['userid'];//Or $row[0] depending on the format of $row
}
答案 1 :(得分:2)
每一行都是一个数组,而内爆不会以二维方式连接。
如果您希望这样做输出,建议您尝试将循环中的语句更改为:
$existingMembers[] = $row['userid'];
答案 2 :(得分:1)
我知道我稍晚发布这个答案,但是何时使用不同的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_*
函数的具体用例。什么时候使用特定功能的用例似乎有点不清楚。我希望这有助于明确这一点。
答案 3 :(得分:0)
尝试fetch_field()而不是我认为它将返回字段的值。 我认为fetch_row正在为你提供数组(' userid' => 1)
答案 4 :(得分:-1)
变化
$existingMembers[]=$row;
到
$existingMembers[]=$row['userid];