Php 当实际存在值时,Sql语句返回null
我在后端使用Flight框架构建RESTful服务,使用PDO从MySql检索数据Php 当实际存在值时,Sql语句返回null,php,mysql,json,pdo,Php,Mysql,Json,Pdo,我在后端使用Flight框架构建RESTful服务,使用PDO从MySql检索数据 require 'flight/Flight.php'; Flight::route('GET /satellites', function () { $sql = "SELECT * FROM satellites"; try { $db = getConnection(); $stmt = $db->prepare($sql);
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不应该为null,它肯定有一个值(我通过PHPMyAdmin检查了它)。还有一个名为null的列,其值为98.2,应该称为nadir。为什么它被称为空
顺便说一句,卫星和最低点列的数据类型是varchar(255)。然后,我将卫星列数据类型更改为文本,但都是一样的 在您的记录中可能有隐藏字符,如您的var_dump数据所示:
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
);
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\u dump显示计数。类似地,“最低点”
也有隐藏字符
修复上述问题并继续
这里,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"
}]
您的排序规则是什么?是否检查了
json\u encode()
是否有问题?$stmt->fetchAll()
返回什么?为什么db的字段名为Null?顺便说一句,数据库中的文本是从odt文档复制粘贴的。如果重要的话,null
如何作为字段名(属性)???