当我从PHP函数打印JSON时,它只从SQL打印一行

时间:2016-09-25 14:58:49

标签: php json

我创建了一个从SQL中提取数据并将其转换为JSON的函数,但是当我打印数据时,它只返回一行。

Db_functions.php

public function getfeeds(){
    $stmt = $this->con->prepare("select id,title,status,profilepic,created_at,url from news");
    $stmt->execute();
    $result = $stmt->get_result();
    $row = array();
    while ($r = $result->fetch_assoc()) {
       $row =$r;
       $nrow['news'] = array($row);
       $json = str_replace("\\/", "/",json_encode($nrow,JSON_PRETTY_PRINT));
       echo'<pre>';
       return $json;
    }

feed.php

<?php
session_start();
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
$feeds= $db->getfeeds();
print_r($feeds);
   ?>

输出

{
    "news": [
        {
            "id": 1,
            "title": "test",
            "status": "this is content",
            "profilepic": "0",
            "created_at": "2016-09-05 12:11:17",
            "url": "0"
        }
    ]
}

但是输出应该像这样有两行

{
    "news": [
        {
            "id": "1",
            "title": "test",
            "status": "this is content",
            "profilepic": "0",
            "created_at": "2016-09-05 12:11:17",
            "url": "0"
        }
    ]
}
{
    "news": [
        {
            "id": "2",
            "title": "JCECE",
            "status": "JCECE 2016 will be conducted on June 5, 2016 by JCECE Board, which is the exam conducting authority for the engineering entrance examination. JCECE 2016 will be conducted to offer admissions to undergraduate engineering courses at the participating institutes of JCECE 2016 in the state of Jharkhand. As of now, there are a total of 19 colleges (government+private) that will offer over 6000 B.E/B.Tech seats to aspiring candidates in Jharkhand. \r\n\r\nApplication Dates:16 Apr 2016 to 16 May 2016\r\n\r\nAdmit Card Date:11 May 2015\r\n\r\nExam Dates:05 Jun 2016\r\n\r\nResult Date:01 Jul 2015 to 10 Jul 2015      ",
            "profilepic": "http://results.jharkhandeducation.net/JCECEB/JCECEB-Logo.jpg",
            "created_at": "2016-09-16 10:14:55",
            "url": "https://jcece.co.in/"
        }
    ]
}

1 个答案:

答案 0 :(得分:3)

你有一个返回INSIDE你的while循环因此它只返回结果集的第一行。

public function getfeeds(){
    $stmt = $this->con->prepare("select id,title,status,profilepic,created_at,url from news");
    $stmt->execute();
    $result = $stmt->get_result();

    $nrow = array();

    while ($r = $result->fetch_assoc()) {

       $nrow[] = $r;
    }

    return json_encode($nrow);
}

像这样打电话

<?php
session_start();
require_once 'include/DB_Functions.php';
$db = new DB_Functions();
$feeds= $db->getfeeds();
// its a string and not an array so print_r wont work
echo $feeds;  
?>