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

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

QA

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

답변 3

본문

회원가입 시 여분필드 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'])); 로 해보시는 것은 어떨까 합니다. 

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

 

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


*소스*

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

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 2,662
© SIRSOFT
현재 페이지 제일 처음으로