我在后端使用Flight framework构建RESTful服务,使用PDO从MySql检索数据。
require 'flight/Flight.php';
Flight::route('GET /satellites', function () {
$sql = "SELECT * FROM satellites";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$response = json_encode($stmt->fetchAll());
$db = null;
echo "{sucess: true, records:" . "$response" . "}";
} catch (PDOException $e) {
echo '{"error":{"text":' . $e->getMessage() . '}}';
}
});
Flight::start();
我得到这个JSON响应:
{
sucess: true,
records:[
{
"id":"1",
"dates":"01.01.2007 - 01.01.2011",
"satellite":null,
null:"98.2",
"resolution":"15",
"band":"30",
"price":"$15"
}
]
}
上面是正确的,但是satellite不应该为空,它肯定有一个值(我通过PHPMyAdmin检查过)。还有一个名为null的列,值为98.2,应该称为nadir。为什么叫空?
顺便说一下,satellite和nadir列的数据类型是varchar(255)。然后我将附属列数据类型改为文本,但都是一样的。
最佳答案
在您的记录中可能有隐藏字符,如您的var_dump数据所示:
array(1) {
[0]=> array(10) {
["id"]=> string(1) "1"
["dates"]=> string(23) "01.01.2007 - 01.01.2011"
["satellite"]=> string(9) "SAT7" // This 4 character is showing count 9
["nadir"]=> string(4) "98.2"
["resolution"]=> string(2) "15"
["band"]=> string(2) "30"
["price"]=> string(3) "$15"
}
}
上面的
"SAT7"
实际上看起来像4个字符的单词,但它有一些隐藏字符,var_dump显示计数。类似地,"nadir"
也有隐藏字符。解决上述问题并继续
这里json输出给出:
[{
"id":"1",
"dates":"01.01.2007 - 01.01.2011",
"satellite":"SAT\u00ad7", // Hidden characters in value
"nadir\u00ad":"98.2", // Hidden characters in field
"resolution":"15",
"band":"30",
"price":"$15"
}]