我在后端使用Flight框架来构建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"
}
]
}
以上是正确的,但卫星不应该为空,它肯定有一个值(我通过PHPMyAdmin检查它)。还有一个名为null的列,值为98.2,应该称为nadir。为什么称为null?
BTW,卫星和天底列的数据类型是varchar(255)。然后我将卫星列数据类型更改为文本,但都是一样的。
答案 0 :(得分:1)
在您的记录中,可能存在隐藏字符,因为您的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"
}]
答案 1 :(得分:0)
in getConnection(); you use
// You might missing this line set utf8
$pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;');
$params = array(
'host' => 'localhost', 'username' => 'username',
'password' => 'password',
'dbname' => 'dbname',
'driver_options' => $pdoParams
);