Php 当实际存在值时,Sql语句返回null

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);

我在后端使用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"
        }
    ]
}
上面的说法是正确的,但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) "SAT­7" // 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
如何作为字段名(属性)???