PHP fetchAll PDO :: FETCH_OBJ和json_encode返回无效的JSON

时间:2017-09-25 20:23:00

标签: php mysql json pdo

我尝试使用PDO::FETCH_OBJjson_encode从我的MySQL数据库中获取一些数据,但由于我在MySQL表中添加了DATE字段,因此它无法正常工作。

这就是我的代码:

$app->get('/api/teams', function(Request $request, Response $response) {
$sql = "SELECT * FROM teams";

try {
    $db = new db();

    $db = $db->connect();

    $stmt = $db->query($sql);
    $teams= $stmt->fetchAll(PDO::FETCH_OBJ);
    $db = null;
    echo json_encode($teams);

   } catch(PDOException $e) {
       echo '{"error": {"text": '.$e->getMessage().'}';
   }
});

在我添加DATE - 字段之前,它工作得非常好,它返回了一个包含一堆对象的数组。现在它根本不返回任何数据。即使我在例如调用/api/teams/25时 - 即使使用日期数据,我也会收到正确的数据。所以它只是"当我想立即收到所有团队/数据时失败。

有人能告诉我什么是错的以及如何解决它?

我也可以告诉我,我试图这样做:

foreach($teams as $team){
    echo json_encode($team);
}

但是这返回了无效的JSON数据,这是一堆没有逗号分隔的对象

修改

我的DB SCHEMA看起来像这样,

id (int(11), primary_key, auto_increment)
team ( varchar(255) )
country ( varchar(255) )
league ( varchar(255) )
creation_day ( date )

**编辑2 **

foreach - 示例返回的无效JSON如下所示:

{"id":"27", "Bayern München", "country":"Germany", "league": "Bundesliga, "creation_day": "2016-10-14"} {"id":"28", "Borussia Dortmund", "country":"Germany", "league": "Bundesliga, "creation_day": "2016-10-14"}

..等等

2 个答案:

答案 0 :(得分:0)

问题是你没有发出一个JSON文档,但有几个只是被打碎了。那是无效的。就这样做:

echo json_encode($teams);

答案 1 :(得分:0)

  

PDO :: FETCH_OBJ:返回一个匿名对象,其属性名对应于结果集中返回的列名

     

http://php.net/manual/en/pdostatement.fetch.php

我怀疑您使用PDO::FETCH_OBJ是问题的根源。如果您只想将整个结果输出为JSON,我建议您将其更改为PDO::FETCH_ASSOC

所以你的代码示例如下:

$app->get('/api/teams', function(Request $request, Response $response) {
$sql = "SELECT * FROM teams";

try {
    $db = new db();

    $db = $db->connect();

    $stmt = $db->query($sql);
    $teams= $stmt->fetchAll(PDO::FETCH_ASSOC); // <-- This changes
    $db = null;
    echo json_encode($teams);

   } catch(PDOException $e) {
       echo '{"error": {"text": '.$e->getMessage().'}';
   }
});

我认为这是您的问题的原因是因为JSON需要某种格式,所以如果您没有从echo获得任何输出,那么您的JSON可能无效。如果您想测试,可以查看从json_encode收到的内容:

  

<强> json_encode

     

成功时返回JSON编码的字符串,失败时返回FALSE。

     

http://php.net/json_encode