如何在获取结果集行时访问单个列值

问题描述 投票:0回答:5

只是尝试不同的功能,在继续自学之前尝试尽可能多地学习它们。有人可以解释一下下面发生了什么吗? (请忽略查询未准备好或根本不安全)

$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

php arrays resultset
5个回答
2
投票

$row
是从查询返回的列的数组。

print_r($row)
将显示您添加的内容。

尝试:

while($row = $relationshipResult->fetch_row()) {
    $existingMembers[]=$row['userid'];//Or $row[0] depending on the format of $row
}

2
投票

每一行都是一个数组,内爆不会在二维中连接。

如果您希望执行您建议的输出,请尝试将循环中的语句更改为:

$existingMembers[] = $row['userid'];

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_*
函数的具体用例。何时使用特定功能的用例以前似乎有点不清楚。我希望这有助于澄清这一点。

祝你好运,编码愉快! :)


0
投票

尝试 fetch_field() 相反,我认为它会返回字段的值。 我认为 fetch_row 正在为您提供数组('userid'=>1)


-1
投票

改变

$existingMembers[]=$row;

$existingMembers[]=$row['userid];
© www.soinside.com 2019 - 2024. All rights reserved.