2012-01-20 81 views
0

我想在發回給我的應用程序之前向json對象添加更多信息。如何附加到PDO結果集數組或Json_encoded字符串?

$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) .'}'; 

的PDO查詢返回這樣設置時,我贊同($ RES)結果

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

然後它被編碼回jquery-回聲 '{ 「項目」:'。 json_encode($ res)。'}'; 給我

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

我想補充 「是否新款」: 「1」 來表示,但是當我嘗試 $水庫[ '是否新款'] = 「1」;或array_merge我結束了

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

這是行不通的。我需要

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

上午我在嘗試誤導做到這一點?

+0

你需要在陣列上,而不是json。顯示您的實際PHP代碼。 – mario

+0

好的,謝謝 – mcktimo

回答

0

我誤解你的問題,糊塗了的代碼......你shoudl INCAT與陣列dealign最初嘗試以下操作:

$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我wouldnt嘗試操縱JSON序列化的字符串。我會doo所有修改本地︰

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

echo json_encode($items); 
+0

我可能有其他一些問題,但FETCH_ASSOC給了我同樣的結果{「items」:{「0」:{「uid」:「10」,「repo」:「bnef」},「isnew」 :「1」}} – mcktimo

+0

我同意,檢查json輸出只是讓我知道我有一個問題。 – mcktimo

+0

也fetch_All給我所有的行。在這種情況下,它只返回一個。爲了進入內部,我需要進入第0行:$ res0 = $ res [0];然後我可以添加到:$ res0 ['isnew'] =「1」,並把它放回第0行$ newres [0] = $ res0。現在json_encode($ newres)讓我得到我想要的。謝謝 – mcktimo