Kunal Agrawal Kunal Agrawal - 2 months ago 7
PHP Question

When I am printing JSON from a PHP function it's printing only one row from SQL

I have created a function to pull data from SQL and convert it to JSON but when I print the data it is returning only one row.

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);
?>


Output is

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


but output should come like this with two rows

{
"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/"
}
]
}

Answer

You have a return INSIDE your while loop hence it returns only the first row from the result set.

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);
}

Called like this

<?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;  
?>