여분필드에 다중값을 serialize로 넣었는데 unserialize 로 다시 변수화가 안됩니다 채택완료
회원가입 시 여분필드 mb_10 하나에 여러 값을 넣으려고
serialize 를 사용했고 아래와 같이 DB 에 정상적으로 값이 들어갑니다.
a:6:{s:5:"gunmu";s:2:"kk";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:2:"kk";s:7:"cophone";s:2:"kk";s:5:"cofax";s:2:"kk";s:6:"cojuso";s:2:"kk";}
다시 꺼낼려고 아래와 같이 하면 bool(false) 가 뜹니다.
$row = unserialize($member['mb_10']); var_dump($row);
그런데 아래와 같이 하면 정상적으로 $row에 배열로 담깁니다.
$data = 'a:6:{s:5:"gunmu";s:2:"kk";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:2:"kk";s:7:"cophone";s:2:"kk";s:5:"cofax";s:2:"kk";s:6:"cojuso";s:2:"kk";}';
$row = unserialize($data); var_dump($row);
그냥 DB에 들어있는 데이터를 $data에 그대로 담으면 잘되고 $member['mb_10']으로 바로 하면 안되는데 이유가 뭘까요
답변 3개
또 다른 방법으로 db에 저장할 때 아예 rawurlencode 로 저장하고 DB에서 읽어와서 사용할때 rawurldecode 로 변환해서 사용하는 방법도 있습니다.
이경우는 꼭 똘미님의 경우 이외에도 적용이 가능합니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
필드에 ' " ' 값이 있어서 인듯합니다.
$member['mb_10']에 값이 들어오는 곳에
$member['mb_10'] = rawurlencode($row['mb_10']) 로 옮겨와 저장하고
실제 사용하려고 할때
$row = unserialize(rawurldecode( $member['mb_10'])); 로 해보시는 것은 어떨까 합니다.
참고로 태스트는 해보지 않았습니다.
답변에 대한 댓글 1개
정말 이해가 안갑니다.
*소스*
$data1 = 'a:6:{s:5:"gunmu";s:1:"k";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:1:"k";s:7:"cophone";s:1:"k";s:5:"cofax";s:1:"k";s:6:"cojuso";s:2:"kk";}';
$data2 = $member['mb_10'];
echo $data1.'<br/>';
echo $data2.'<br/>';
echo $member['mb_10'].'<br/>';
var_dump(unserialize($data1));
var_dump(unserialize($data2));
var_dump(unserialize($member['mb_10']));
*출력화면*
a:6:{s:5:"gunmu";s:1:"k";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:1:"k";s:7:"cophone";s:1:"k";s:5:"cofax";s:1:"k";s:6:"cojuso";s:2:"kk";}
a:6:{s:5:"gunmu";s:1:"k";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:1:"k";s:7:"cophone";s:1:"k";s:5:"cofax";s:1:"k";s:6:"cojuso";s:2:"kk";}
a:6:{s:5:"gunmu";s:1:"k";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:1:"k";s:7:"cophone";s:1:"k";s:5:"cofax";s:1:"k";s:6:"cojuso";s:2:"kk";}
array(6) { ["gunmu"]=> string(1) "k" ["sosok"]=> string(2) "kk" ["jikwi"]=> string(1) "k" ["cophone"]=> string(1) "k" ["cofax"]=> string(1) "k" ["cojuso"]=> string(2) "kk" } bool(false) bool(false)
echo 로 찍어보면 모두 똑같은 값을 담고 있는데, unserialize() 을 사용할 때 $data1, $data2 는 잘 되고, $member['mb_10']은 안됩니다.ㅠㅠ 아우.. 혹시 다른 집히는데 있으시면 부탁드리겠습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 1개
필드에 a:6:{s:5:"gunmu";s:2:"kk";s:5:"sosok";s:2:"kk";s:5:"jikwi";s:2:"kk";s:7:"cophone";s:2:"kk";s:5:"cofax";s:2:"kk";s:6:"cojuso";s:2:"kk";}
이렇게 정상적으로 들어있습니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인