簡體   English   中英

如何將PDO :: FETCH_NUM正確格式化為JSON結果

[英]How to properly format PDO::FETCH_NUM into JSON results

我正在返回這樣的JSON文檔:

ug_gpid: [[4], [2], [3]]

這不是預期的格式,我想要這樣:

ug_gpid: [4, 2, 3]

這是我的代碼:

$user = json_decode($resp, true);
$sql = "SELECT ug_gpid FROM user_group WHERE ug_usid =:id AND ug_status = 1";

try {
    $db = getConnection();
    $stmt = $db->prepare($sql);
    foreach ($user as $item => $value) {
        $newUser[$item] = $value;
        $stmt->bindParam("id", $value["us_id"]);
        $stmt->execute();
        $ugroup = $stmt->fetchAll(PDO::FETCH_NUM);
        $newUser[$item]['ug_gpid'] = $ugroup;
    }
    $db = null;
    $response = $app->response();
    $response->header('Content-Type', 'application/json');
    echo json_encode($newUser, JSON_NUMERIC_CHECK);     
} catch(PDOException $e) {                  
    $error = array("queryGroupError"=> array("text"=>$e->getMessage()));
    echo json_encode($error); 
}

我將結果存儲在$ugroup 如何獲得所需的輸出?

問題是PDOStatement::fetchAll返回一個數組數組。 您要構建單個值的平面數組。

我會改用這個...

$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $us_id);
foreach ($user as $item => $value) {
    $newUser[$item] = $value;
    $us_id = $value['us_id']; // this is for the bind
    $stmt->execute();
    while ($gpid = $stmt->fetchColumn()) {
        $newUser[$item]['ug_gpid'][] = $gpid;
    }
}

它無法按預期運行的原因已經得到解答; 但是,使用單個查詢會更有效:

$sql = sprintf(
    "SELECT ug_usid, GROUP_CONCAT(ug_gpid)
       FROM user_group 
       WHERE ug_usid IN (%s) AND ug_status = 1
       GROUP BY ug_usid",
    str_pad('?', count($user) * 2 - 1, ',?');
);

// ...

// run query and build search result map
$stmt = $db->prepare($sql);
$stmt->execute(array_column($user, 'us_id'));
$groups = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);

// extend user information with search results
array_walk($user, function(&$u) use ($groups) {
    if (isset($groups[$user['us_id']])) {
        $u['ug_gpid'] = explode(',', $groups[$user['us_id']]);
    } else {
        $u['ug_gpid'] = [];
    }
});

echo json_encode($user, JSON_NUMERIC_CHECK);

請注意,它假定您使用MySQL作為數據庫引擎,因為它使用GROUP_CONCAT ,它是SQL的MySQL擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM