php - 如何使用 php pdo 创建 JSON 嵌套对象

标签 php mysql json pdo

我已经在 stackoverflow 上检查了大多数相关答案,但找不到适合我的情况。

任何善意的回复都将受到高度赞赏。

我正在使用 PHP PDO 从两个名为 comments 和 comments_reply 的 mysql 表中获取数据,其值如下

评论表

  • comment_id
  • news_id
  • comment_names
  • 评论日期

comment_reply表

  • reply_id
  • comment_id
  • 回复名称
  • 回复
  • 回复日期

我返回空数组作为结果,而不是像这样的 JOSN 格式的结果:

[
   {"id": 1,
    "comment_date": "2017-08-09",
    "comment_time": "06:10:00",
    "names": "Imenwo Alex",
    "img": "c1.jpg",
    "comments": "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>",
    "replies":[
        {
                 "id": 1,
                "reply_date": "2017-08-09",
                "reply_time": "06:10:00",
                "names": "frank Alex",
                "img": "c1.jpg",
                "reply": "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>"
            },
            {
                 "id": 2,
                "reply_date": "2017-08-09",
                "reply_time": "06:10:00",
                "names": "frank Alex",
                "img": "c1.jpg",
                "reply": "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>"
            }
    ]
    },
    {"id": 2,
    "comment_date": "2017-08-09",
    "comment_time": "06:10:00",
    "names": "Imenwo Alex",
    "img": "c1.jpg",
    "comments": "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>",
    "replies":[
            {
                 "id": 1,
                "reply_date": "2017-08-09",
                "reply_time": "06:10:00",
                "names": "frank Alex",
                "img": "c1.jpg",
                "reply": "<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,There are many variations of passages of Lorem Ipsum available, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>"
            }
        ]
    }
]

下面是我的 PHP 脚本:

 //
      $q = "SELECT * FROM comments WHERE comments.news_id =:id";         
      //prepare
      $stmt = $this->DB_con->prepare($q);
      //bind parameters
      $stmt->bindParam(':id', $id);

      //create an array
      $json_response = array(); 
      while($obj=$stmt->fetch(PDO::FETCH_OBJ)) {

          $currentComments = array(
              'id' => $obj->comment_id,
              'comment_names' => $obj->comment_names,
              'comment_date' => $obj->comment_date,
              'comment_time' => $obj->comment_time,
              'comment_img' => $obj->comment_img,
              'comments' => $obj->comments,
              'replies' => array()
          );

          //
          $r = "SELECT * FROM comments_reply WHERE comments_reply.comment_id =:id"; 
          //prepare
          $stmt = $this->DB_con->prepare($r);
          //bind parameters
          $stmt->bindParam(':id', $obj->comment_id);
          while($obj=$stmt->fetch(PDO::FETCH_OBJ)) {

              $currentComments['replies'][] = array(
                  'id' => $obj->reply_id,
                  'reply_names' => $obj->reply_names,
                  'reply_date' => $obj->reply_date,
                  'reply_time' => $obj->reply_time,
                  'reply_img' => $obj->reply_img,
                  'reply' => $obj->reply
              );

          }
          array_push($json_response, $currentComments); //push the values in the array

      }
      return json_encode($json_response);

最佳答案

不要覆盖 $stmt 和 $obj。像这样的事情:

      $q = "SELECT * FROM comments WHERE comments.news_id =:id";         
      //prepare
      $stmt = $this->DB_con->prepare($q);

      $r = "SELECT * FROM comments_reply WHERE comments_reply.comment_id =:id"; 
      //prepare
      $stmt2 = $this->DB_con->prepare($r);

      //execute with bound parameter
      $stmt->execute( array(':id'=> $id));

      //create an array
      $json_response = array(); 

      while($obj=$stmt->fetch(PDO::FETCH_OBJ)) {

          $currentComments = array(
              'id' => $obj->comment_id,
              'comment_names' => $obj->comment_names,
              'comment_date' => $obj->comment_date,
              'comment_time' => $obj->comment_time,
              'comment_img' => $obj->comment_img,
              'comments' => $obj->comments,
              'replies' => array()
          );

          //
          $stmt2->execute( array(':id'=> $obj->comment_id) );

          while($obj2=$stmt2->fetch(PDO::FETCH_OBJ)) {

              $currentComments['replies'][] = array(
                  'id' => $obj2->reply_id,
                  'reply_names' => $obj2->reply_names,
                  'reply_date' => $obj2->reply_date,
                  'reply_time' => $obj2->reply_time,
                  'reply_img' => $obj2->reply_img,
                  'reply' => $obj2->reply
              );

          }
          array_push($json_response, $currentComments); //push the values in the array

      }
      return json_encode($json_response);

关于php - 如何使用 php pdo 创建 JSON 嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45838066/

相关文章:

php - 如何从数据库中的多个表中搜索关键字并且没有公共(public)字段来连接表

php - 如何使用 Drupal `db_select()` 方法转换查询?

JavaScript、Ajax、Json : how to use a variable whose value depends on the json response?

php - 从数据库中获取多个字段到数组

php - 检查是否超过 18 年,仅适用于 1960->1994

php - CakePHP - SQL 查询连接

mysql - SQL:只插入新记录

json - 如何在 Golang 中创建字典列表?

javascript - 将 JSON 数据格式化为表

php if inside foreach 错误