2014-09-08 7 views
0

J'ai une base de données où je stocke des données, et un champ est une chaîne json.Récupérer un champ json du champ mysql avec PDO

-je insérer un JSON dans ce domaine:

 $stmt->bindParam(":settings", json_encode($widget->settings)); 

Puis lorsque je tente de récupérer le disque que j'obtenir ma ligne avec la colonne de paramètres sous forme de chaîne. J'ai besoin de mes données pour être json, donc je devrais décoder ce champ avant de sortir mes enregistrements. Si je vais avec:

 $app->response->setBody(json_encode($data, JSON_NUMERIC_CHECK)); 

je reçois quelque chose comme:

"name":"My Name","label":null,"row":null,"settings":"{\"site\":\"dfsdf\",\"action\":\"UrlInfo\"}" 

avec les paramètres se sont échappés. Je devrais d'abord décoder les paramètres, puis encoder à nouveau pour afficher mes résultats. Comment puis-je faire pour résoudre ceci?

MISE À JOUR:

je récupérer mes données à l'aide PDO, donc j'obtenir un tableau:

 $data = $stmt->fetchAll(PDO::FETCH_ASSOC); 

Avant sauver ce que j'ai:

"settings":{"site":"fff","action":"UrlInfo"}} 
+0

Quelle est la valeur de la chaîne avant de l'enregistrer dans la base de données? – MrD

+0

Avant d'avoir la même chaîne JSON. J'utilise angularjs comme frontend, donc je travaille principalement avec l'objet javascript – Tropicalista

+0

De votre message je peux conclure que vous encodez vos données deux fois. La première fois avant de l'insérer dans DB, et la deuxième fois lorsque vous le lisez depuis DB. Lorsque vous lisez vos données depuis la base de données, vous devez préformer json_decode (VOTRE STRING FROM DB) car vos données sont déjà codées. – MrD

Répondre

1

Lorsque vous récupérez les données, vous devez utiliser json_decode pour inverser l'encodage que vous avez fait lorsque vous l'avez inséré.

foreach ($data as &$row) { // Use reference so we can modify in place 
    $row['settings'] = json_decode($row['settings']); 
} 
$app->response->setBody(json_encode($data, JSON_NUMERIC_CHECK)); 
+0

J'utilise PDO. Donc, quand je récupère un enregistrement, j'obtiens un tableau, json_decode attend une chaîne. J'ai mis à jour ma question. – Tropicalista

+0

OK, j'ai mis à jour ma réponse pour cela. – Barmar

+0

Ouais !! Cela fonctionne très bien. Merci beaucoup!!! – Tropicalista

Questions connexes