我遇到问题,函数将对象返回为 false。该函数首先获取特定组中所有用户的列表,然后使用该数组获取每个用户发布的每条消息,并应将所有消息作为一个大消息数组返回。欢迎更正标题。
public function listMessages($group_id){
$db = initDb();
$getGroupUsers = $db->prepare("SELECT user_id FROM in_group WHERE group_id = :group_id");
$getGroupUsers->bindParam(":group_id", $group_id, PDO::PARAM_INT);
$getGroupUsers->execute();
$users = $getGroupUsers->fetchAll(PDO::FETCH_ASSOC);
$messages = array();
foreach ($users as $item) {
$getMessage = $db->prepare("SELECT * FROM task_messages WHERE user_id = :user_id ORDER BY visited ASC");
$getMessage->bindParam(":user_id", $item['user_id'], PDO::PARAM_INT);
$getMessage->execute();
if($getMessage->rowCount() > 0){
$message = $getMessage->fetchObject();
array_push($messages, $message);
}
}
return json_encode($messages);
}
但由于某种原因,它只为每个用户获取一条消息。我通过添加来自同一用户的 3 条消息并调用此函数来对此进行测试。
但是如果我添加来自其他用户的消息
这是我的数据库,如下图所示
最佳答案
文档说 PDOStatement::fetchObject:
Returns an instance of the required class with property names that correspond to the column names or FALSE on failure.
说它返回一个类的实例(在你的例子中是stdclass),但没有关于多个实例或数组的信息。您可能必须循环遍历结果集,直到 fetchObject 返回 false。或者像上面的查询中那样使用 fetchAll。
关于php - PDO Foreach 获取循环返回具有特定 id 的第一行,其余为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724456/