json_encode Returning Null for Description Field
Problem:
The PHP code below fails to encode the "description" field in a JSON response, returning NULL instead.
include('db.php'); $result = mysql_query('SELECT * FROM `staff` ORDER BY `id` DESC LIMIT 2') or die(mysql_error()); $rows = array(); while($row = mysql_fetch_assoc($result)){ $rows[] = $row; } echo json_encode($rows);
Database Schema:
CREATE TABLE `staff` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` longtext COLLATE utf8_unicode_ci, `description` longtext COLLATE utf8_unicode_ci, `icon` longtext COLLATE utf8_unicode_ci, `date` longtext COLLATE utf8_unicode_ci, `company` longtext COLLATE utf8_unicode_ci, `companyurl` longtext COLLATE utf8_unicode_ci, `appurl` longtext COLLATE utf8_unicode_ci, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Output:
[{"id":"4","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"},{"id":"3","name":"Noter 2","description":null,"icon":"http:\/\/images.apple.com\/webapps\/productivity\/images\/noter2_20091223182720-thumb.jpg","date":"1262032317","company":"dBelement, LLC","companyurl":"http:\/\/dbelement.com\/","appurl":"http:\/\/noter2.dbelement.com"}]
Solution:
The likely cause is that the data is being retrieved using a non-UTF8 encoding. To fix this, add the following line before the SELECT query:
mysql_query('SET CHARACTER SET utf8');
This will ensure that the data is retrieved in UTF8 encoding, which will allow json_encode to encode the "description" field correctly.
The above is the detailed content of Why is my `json_encode` function returning NULL for the description field in my PHP JSON response?. For more information, please follow other related articles on the PHP Chinese website!