我尝试使用PDO::FETCH_OBJ
和json_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"}
..等等
答案 0 :(得分:0)
问题是你没有发出一个JSON文档,但有几个只是被打碎了。那是无效的。就这样做:
echo json_encode($teams);
答案 1 :(得分:0)
PDO :: FETCH_OBJ:返回一个匿名对象,其属性名对应于结果集中返回的列名
我怀疑您使用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。