2017-09-25 206 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