PHP使用fetchall PDO :: FETCH_OBJ和json_encode返回无效JSON
问题描述:
我尝试使用PDO::FETCH_OBJ
和json_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"}
..和等
答
问题是你不发射一个JSON文件,但有几个只是被砸在一起。这是无效的。只是这样做:
echo json_encode($teams);
答
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
返回上失败成功或FALSE一个JSON编码字符串。
你可以发表你的架构? –
@JeffPuckett什么架构? – Steve
数据库模式 –