简体   繁体   中英

Json Encoding Issue in PHP 5

I'm trying to use Json with my database using php5 but suffering from a weird result. This database has four fields - 'id', 'Title', 'Thread', 'date' but the jason result looks like the following.

[
   {
        "0": "1",
        "id": "1",
        "1": "Title 1",
        "Title": "Title 1",
        "2": "Thread 1",
        "Thread": "Thread 1",
        "3": "2011-10-19",
        "date": "2011-10-19"
    },
    {
        "0": "2",
        "id": "2",
        "1": "Title 2",
        "Title": "Title 2",
        "2": "Thread 2",
        "Thread": "Thread 2",
        "3": "2011-10-03",
        "date": "2011-10-03"
     }
]

You can see there are duplicated information in the result. Where are they from?? I will attach the code I've written... Jason & PHP masters, please enlighten me :'(.. Thank you in advance.. I will try to solve it again as I wait for your help....

    private static function queryAndFetch($tableName)
    {
        $query = "SELECT id, Title, Thread, date From $tableName";
        $result = mysqli_query(self::$link, $query);
        if(!($result))
        {
            echo "Error";
            exit;
        }


        // $posts = mysqli_fetch_assoc(self::$result); - Working
        self::$fetchedResult = array();
        while($row = mysqli_fetch_array($result))
        {
            self::$fetchedResult[] = $row;
        }
    }

    private static function encode()
    {
        //print_r(self::$fetchedResult);
        //if($format == 'json') {
        header('Content-type: application/json');
        echo json_encode(self::$fetchedResult);
        //}
        //echo "hi".json_last_error();
    }
}

mysqli_fetch_array returns the result rows with both associative and enumerated keys. If you only want the associative array keys, then use mysqli_fetch_assoc .

It looks like your mysqli_fetch_array($result) is returning an associative array rather than indexed array.

Try this change:

while($row = mysqli_fetch_array($result)) {
    self::$fetchedResult[] = array(
        'id' => $row->id,
        'Title' => $row->Title,
        'Thread' => $row->Thread,
        'date' => $row->date
    );
}

If that doesn't work, try using $row['id'], $row['Title'], $row['Thread'] and $row['date'].

Alternatively, to avoid having to write out each field, change to mysqli_fetch_assoc($result) specifically.

I suspect this is the issue you've got?

Thanks, MyStream

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM