여분필드에 다중값을 serialize로 넣었는데 unserialize 로 다시 변수화가 안됩니다

여분필드에 다중값을 serialize로 넣었는데 unserialize 로 다시 변수화가 안됩니다

QA

여분필드에 다중값을 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자 까지 입니다.

이 문제는 아닌것 같습니다.
필드에 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";}

이렇게 정상적으로 들어있습니다.

필드에 ' " ' 값이 있어서 인듯합니다.

$member['mb_10']에 값이 들어오는 곳에

$member['mb_10']  =  rawurlencode($row['mb_10']) 로 옮겨와 저장하고

실제 사용하려고 할때

$row = unserialize(rawurldecode( $member['mb_10'])); 로 해보시는 것은 어떨까 합니다. 

참고로 태스트는 해보지 않았습니다.

 

답변 감사합니다. 그러나 테스트 해보니 안됩니다. 생각을 해봐도 그 문제가 아닌것 같습니다.
정말 이해가 안갑니다.


*소스*

$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']은 안됩니다.ㅠㅠ 아우.. 혹시 다른 집히는데 있으시면 부탁드리겠습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 6
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT