Как вы добавляете в массив результатов PDO или строку Json_encoded? - PullRequest
0 голосов
/ 21 января 2012

Я хочу добавить немного больше информации к объекту 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) .'}'; 

Запрос PDO возвращает такой набор результатов, когда я эхо ($ res)

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

затем кодируется обратно в jquery- echo '{"items":'.json_encode ($ res). '}';давая мне

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

Я бы хотел добавить к этому "isnew": "1", но когда я пытаюсь $ res ['isnew'] = "1";или array_merge Я получаю

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

, который не работает.Мне нужно

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

Неужели я ошибаюсь, пытаясь это сделать?

1 Ответ

0 голосов
/ 21 января 2012

Я неправильно прочитал ваш вопрос и запутался в коде ... вы должны иметь дело с массивом, сначала попробуйте следующее:

$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

Дополнительно я не буду пытаться манипулировать сериализованной строкой JSON,Я бы сделал все модификации изначально:

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

echo json_encode($items); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...