여분필드에 다중값을 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 로 변환해서 사용하는 방법도 있습니다.
이경우는 꼭 똘미님의 경우 이외에도 적용이 가능합니다.
저장하는 글자가 255자가 넘는 것이 아닌가 확인해보세요.
저장 필드가 255자 까지 입니다.
필드에 ' " ' 값이 있어서 인듯합니다.
$member['mb_10']에 값이 들어오는 곳에
$member['mb_10'] = rawurlencode($row['mb_10']) 로 옮겨와 저장하고
실제 사용하려고 할때
$row = unserialize(rawurldecode( $member['mb_10'])); 로 해보시는 것은 어떨까 합니다.
참고로 태스트는 해보지 않았습니다.