2017-09-25 142 views
0

我尝试使用PDO::FETCH_OBJjson_encode来从我的MySQL数据库的一些数据,但因为我在MySQL表中增加了一个DATE -field这是行不通的。PHP使用fetchall PDO :: FETCH_OBJ和json_encode返回无效JSON

这是我的代码如下所示:

$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 **

无效的JSON其中foreach -example回报,看起来是这样的:

{"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"} 

..和等

+0

你可以发表你的架构? –

+0

@JeffPuckett什么架构? – Steve

+0

数据库模式 –

回答

0

问题是你不发射一个JSON文件,但有几个只是被砸在一起。这是无效的。只是这样做:

echo json_encode($teams); 
+0

呃......但那就是我所做的? – Steve

+0

您在循环内部执行此操作时,将生成N个JSON文档,而不是单个有效的JSON文档。通常,在生成JSON结果时,您只允许一次调用和一次调用“json_encode”,因此如果您需要重构数据以使其以JSON方式工作,那么在进行调用之前您需要这样做。在你的情况下,你似乎有一个数组,所以它可以直接传入,不需要迭代。 – tadman

+0

在帖子中,我写道“我也试过”...'echo json_encode($ teams)'什么也没有返回 - 因为我在MySQL表中添加了'Date'字段 – Steve

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

返回上失败成功或FALSE一个JSON编码字符串。

http://php.net/json_encode

相关问题