如何附加到PDO结果集数组或Json编码字符串?

时间:2012-01-20 23:38:47

标签: php pdo

我希望在将json对象发送回我的应用程序之前向json对象添加更多信息。

$sql = "SELECT * FROM users WHERE repo=?";
$q=$dbh->prepare($sql);
$q->execute(array($repo));  
$res = $q->fetchAll(PDO::FETCH_OBJ);
$res['isnew']="1"; //this part isn't working
echo '{"items":'. json_encode($res) .'}'; 

当我回显($ res)

时,PDO查询返回这样的结果集
 Array{"items":[{"uid":"10","repo":"bnef"}]}

然后它被编码回jquery- echo'{“items”:'。 json_encode($ res)。'}'; 给我

{"items":[{"uid":"10","repo":"bnef}]}

我想添加“isnew”:“1”,但是当我尝试时 $ RES [ '是否新款'] = “1”;或者array_merge我最终得到了

{"items":{"0":{"uid":"10","repo":"bnef"},"isnew":"1"}}

哪个不起作用。我需要

{"items":[{"uid":"10","repo":"bnef, "isnew":"1"}]}

我是否误导尝试这样做?

1 个答案:

答案 0 :(得分:0)

我误解了你的问题,并对代码感到困惑......你最近要对数组进行处理,请尝试以下方法:

$sql = "SELECT * FROM users WHERE repo=?";
$q=$dbh->prepare($sql);
$q->execute(array($repo));

$items = $q->fetchAll(PDO::FETCH_OBJ);

// you actually wnt isnew as a property of each row 
// so you need to loop over the results
foreach($items as $key => $item){
   $item->isnew = 1;
}

echo json_encode(array(
  'items' => $items
));

$res = $q->fetchAll(PDO::FETCH_OBJ);
$res['isnew']="1"; //this part isn't working

它无效,因为您使用了FETCH_OBJ而不是FETCH_ASSOC,因此您需要使用StdObject实例而不是数组。在这种情况下,您需要使用->分配:

$res = $q->fetchAll(PDO::FETCH_OBJ);
$res->isnew = "1";

或者你可以获取一个关联数组:

$res = $q->fetchAll(PDO::FETCH_ASSOC);
$res['isnew']="1"; //this will work now

Additionalyl我不会尝试操纵JSON序列化字符串。我会原生地进行所有修改:

$items = array(
  'items' => $res
);

echo json_encode($items);