2014-09-08 4 views
0

일부 데이터를 저장하는 데이터베이스가 있고 한 필드는 json 문자열입니다.PDO가있는 mysql 필드에서 json 필드 검색

나는이 분야에서 JSON을 삽입 : 나는 레코드를 검색 할 때

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

는 그럼 난 문자열로 설정 컬럼 내 행을 얻을. 내 데이터가 json이되어야하므로 내 레코드를 출력하기 전에이 필드를 디코딩해야합니다. 내가 갈 경우 설정을 탈출

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

로 :

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

내가 좋아하는 뭔가를 얻을. 먼저 설정을 디코딩 한 다음 내 결과를 출력하기 위해 다시 인코딩해야합니다. 어떻게 해결할 수 있습니까?

UPDATE :

내가 PDO를 사용하여 내 데이터 검색, 그래서 배열을 얻을 :이 저장하기 전에 내가 가진

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

을 :

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

DB에 저장하기 전에 문자열의 값은 무엇입니까? – MrD

+0

전에 동일한 json 문자열이 있습니다. 프론트 엔드로 angularjs를 사용하고 있습니다. 그래서 주로 자바 스크립트 객체로 작업합니다. – Tropicalista

+0

귀하의 게시물에서 나는 귀하가 귀하의 데이터를 두 번 인코딩하고 있다고 결론 지을 수 있습니다. DB에 삽입하기 전에 처음으로, 그리고 DB에서 두 번째로 읽습니다. DB에서 데이터를 읽을 때 json_decode (YOUR STRING FROM DB) 데이터가 이미 인코딩되었으므로 미리 작성해야합니다. – MrD

답변

1

당신이 데이터를 검색 할 때, 삽입 할 때 사용한 인코딩을 되돌리려면 json_decode을 사용해야합니다.

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

PDO를 사용하고 있습니다. 그래서 레코드를 가져올 때 배열을 얻습니다. json_decode는 문자열을 기다리고 있습니다. 내 질문을 업데이트했습니다. – Tropicalista

+0

그래, 내 대답을 업데이트했습니다. – Barmar

+0

예! 이것은 잘 작동합니다. 많은 감사합니다 !!! – Tropicalista

관련 문제