2011-04-05 4 views
3

이 질문에 대한 첫 번째 의견을 Inserting into a serialized array in PHP으로 보았고 그 이유가 궁금합니다. 특히 발생하는 데이터베이스 관리 세션 (데이터베이스 기반 세션 처리)을 사용할 때 세션 핸들러는 직렬화 된 배열을 데이터베이스 필드에 삽입한다는 것을 알 수 있습니다.데이터베이스 필드에 직렬화 된 배열을 삽입하지 않아야하는 이유는 무엇입니까?

+0

가능한 복제본 : http://stackoverflow.com/questions/4894041/php-is-it-bad-design-to-serialize-objects-and-stick-them-in-the-database-for-lat/4894100 – alexantd

+0

@alexantd 필자가 강조한 질문은 왜 PHP 자체가 그것을 사용하는 것이 좋은지는 설명하지 않는다는 점을 제외하고는 동의하는 경향이있다. 고마워. 네 말이 맞아. 내가 더 잘 점검 했어야 해. – JRSofty

답변

4

특정 상황에서는 아무 문제가 없습니다. 세션 관리는 이것이 받아 들일만한 것으로 여겨지는 경우 중 하나입니다. 기억해야 할 점은 직렬화 된 데이터와 데이터베이스의 모든 필드 사이에 데이터를 연결하려고하면 큰 설계 결함을 만들었고 불행히도 이것은 사람들이 시도한 것으로 보았던 것입니다.

거의 모든 기술이 특정 상황에서 올바른 수 있으므로 어떤 곡식으로 "절대하지 마십시오". 충고는 대개 적절한 사용법을 오해하고 자신을 매우 불쾌한 구석으로 만들기 쉽다는 멍청이를 향한 것입니다.

+0

위의 Jon Skeet의 답변에서 언급했듯이 해당 데이터에 대해서는 직렬화하지 않을 것입니다. 나는 왜 그것이 세션 데이터에 허용 될지 이해하지 못했지만, 세션 데이터는 PHP를 위해서만 사용되기 때문에 안전 할 것입니다. 귀하의 답변에 감사드립니다. – JRSofty

+0

질문을 한 후 1 시간 이내에 주관적인 질문에 대한 대답을받는 이유는 무엇입니까? 당신이 이미 마음을 짜내 며 확인을 찾고있는 것처럼 보입니다. 많은 사람들이 더 이상 설명 할 인센티브가 없기 때문에 초록색 체크 표시에 동의하지 않습니다. 나는 루퍼트 (Ruport)의 대답의 "특정 맥락에서"부분을 매우 강하게 강조 할 뿐이다. "확실한"것에 대한 세 가지 강조. – alexantd

+3

@alexantd - 예, 링크 된 중복 질문에 대한 답변이 더 철저합니다. 영웅 쿠키를 즐기십시오. –

3

PHP 이외의 플랫폼에서이 데이터를 얻지 않으려면 어떻게 될 것입니까?

PHP의 직렬화 형식에 대해 모르겠지만 모든 플랫폼의 기본 이진 직렬화 형식은 입니다.은 다른 플랫폼과 호환되지 않습니다. 일반적으로 데이터를 인코딩하는 것은 좋지 않습니다. 데이터베이스에 대한 단일 프론트 엔드.

다른 언어를 사용하지 않아도 데이터베이스 자체가 정보에 대해 알지 못한다는 것을 의미합니다. 따라서이 언어에 대해 쿼리 할 수는 없습니다. 문제가 될 수 있습니다. 그러나 확실히 염두에 두어야 할 사항입니다.

+0

동의하면 정상적인 데이터로 작업하고 있다면 직렬화하지 않는 것이 좋습니다. 필자는 전에 들어 본 적이 없었습니다. PHP가 실제로 serialization을 사용한다는 사실을 알았 기 때문에 궁금해졌습니다. – JRSofty

2

직렬화 된 데이터에 대한 주된 논거는 직렬화 된 데이터가 처음부터 레코드를 검색하지 않고 검색하기가 어렵고 그렇게 효율적으로 수행 할 수 없다는 것입니다.

1

데이터에 따라 다릅니다. 필드에 언어 별 데이터 구조를 저장하면 해당 언어와 연결되며 DB가 제공 할 수있는 모든 것을 포기합니다. 특정 필드에 대한 색인이없고 간단한 업데이트를 실행할 수 없으며 부분 데이터를 추출 할 수없고 데이터 검사, 참조 무결성 등을 수행 할 수 없습니다.

+0

직렬화 된 세션에 어떤 종류의 물건을 저장하면 유용할까요? – johnny

관련 문제