php - PDO Foreach 获取循环返回具有特定 id 的第一行,其余为 false

标签 php mysql json

我遇到问题,函数将对象返回为 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 条消息并调用此函数来对此进行测试。

result as image

但是如果我添加来自其他用户的消息

result when adding another users message

这是我的数据库,如下图所示

database image

最佳答案

文档说 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。

http://php.net/manual/en/pdostatement.fetchobject.php

关于php - PDO Foreach 获取循环返回具有特定 id 的第一行,其余为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48724456/

相关文章:

javascript - 如何根据 highcharts 中的值获得动态颜色变化

php - 确保电子邮件和用户名都没有被占用

javascript - 单击按钮时将单选按钮值存储在数据库中

php - mb_str_replace()... 很慢。有什么选择吗?

php - Paypal Rest API 的工作

MySQL 无法启动 - 错误 : su: warning: cannot change directory to/nonexistent: No such file or directory

mysql - mysqlcheck 检查外键是否有约束

javascript - 在 JavaScript 的 POST 请求中发送 Json 数组

json - 我可以将嵌套的 json 解码为平面结构吗

php使 session 保持事件状态多天