詳細検索

Contact Form DB의 테이블에 대하여

아바타
글쓴이 すがピー

Contact Form DB의 테이블에 대하여
日本語에서 번역 • 원문 보기

Contact Form 7 설문지 양식 플러그인은 이메일만 보내므로, Contact Form DB는 데이터베이스에 데이터를 저장하는 플러그인입니다.

두 플러그인을 모두 WordPress에 추가하면 입력 폼의 내용을 DB에 쉽게 저장할 수 있습니다.

하지만 이 연락처 폼 DB로 만든 표는 사기였습니다.

워드프레스 관리자에서 Contact Form DB 관리자에 접속하면 입력 양식에서 입력된 데이터 목록이 보이고, 단일 폼의 게시물이 하나의 레코드로 저장되는 것처럼 보입니다. 하지만 실제 테이블에서는 입력 양식의 각 입력이 하나의 레코드로 등록되어 있습니다.

양식에 세 개의 입력 항목이 있을 경우, 한 게시물에 세 개의 레코드가 등록되며, 각 레코드에는 게시 시간, 입력 양식 이름, 입력 항목 이름이 포함된 키에 각 입력 항목의 내용만 기록됩니다.

참고로, 표 구조는 다음과 같습니다.

mysql> DESC wp_cf7dbplugin_submits; 
+-------------+---------------+------+-----+---------+-------+
| 필드 | 타입 | 널 | 키 | 기본 | 엑스트라 |
+-------------+---------------+------+-----+---------+-------+
| submit_time | 십진법(16,4) | 아니오 | 뼠 | 무 | |
| form_name | 바르차르(127) | 예 | 물(MUL) | 널(NULL) | |
| field_name | 바르차르(127) | 예 | 물 | 널 | |
| field_value | 긴 텍스트 | 네 | | NULL | |
| field_order | int(11) | 예 | | NULL | |
| 파일 | 롱블롭 | 네 | | NULL | |
+-------------+---------------+------+-----+---------+-------+
6행 인 세트 (0.03초)

색인 목록은 다음과 같습니다.

MYSQL> wp_cf7dbplugin_submits에서 인덱스를 표시; 
+------------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| 표 | Non_unique | Key_name | Seq_in_index | Column_name | 콜레이션 | 기수 | Sub_part | 패킹 | null | Index_type | 댓글 | Index_comment |
+------------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| wp_cf7dbplugin_submits | 1 | submit_time_idx | 1 | submit_time | A | 2 | 널 | 널 | | BTREE | | |
| wp_cf7dbplugin_submits | 1 | form_name_idx | 1 | form_name | A | 1 | null | null | 예 | Btree | | |
| wp_cf7dbplugin_submits | 1 | field_name_idx | 1 | field_name | A | 26 | null | null | 예 | Btree | | |
+------------------------+------------+-----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
셋 중 3행 (0.00초)

참고로, 같은 시간에 다른 게시물 내용의 레코드를 삽입하려고 했을 때 등록할 수 있었고, 관리 화면에서 같은 상태에서 데이터를 탐색했을 때, 같은 시간의 두 게시물이 뒤섞인 하나의 레코드로 표시되었습니다. (물론이죠)

같은 시간은 밀리초 단위로 동일하므로 웹사이트에 크게 신경 쓰지 않는다면 문제가 없을 수 있지만, 개인 정보를 다루는 웹사이트는 특히 주의해야 합니다.

그래서 대응책으로 테이블 구조를 바꾸세요.

먼저, 인덱스를 삭제하세요.

ALTER 테이블 wp_cf7dbplugin_submits 드롭 인덱스 submit_time_idx; 
ALTER 테이블 wp_cf7dbplugin_submits 드롭 인덱스 form_name_idx; 
ALTER 테이블 wp_cf7dbplugin_submits 드롭 인덱스 field_name_idx; 

다음으로, 컴파운드 키로 다시 설정하세요.

Alter table wp_cf7dbplugin_submits 제약 기본 키(submit_time, form_name, field_name 추가); 

결과는 이렇습니다.

MYSQL> wp_cf7dbplugin_submits에서 인덱스를 표시; 
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| 표 | Non_unique | Key_name | Seq_in_index | Column_name | 콜레이션 | 기수 | Sub_part | 패킹 | null | Index_type | 댓글 | Index_comment |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| wp_cf7dbplugin_submits | 0 | 기본 | 1 | submit_time | A | 173 | 영무 | 무효 | | BTREE | | |
| wp_cf7dbplugin_submits | 0 | 기본 | 2 | form_name | A | 173 | 무 | 무 | | BTREE | | |
| wp_cf7dbplugin_submits | 0 | 주 | 3 | field_name | A | 1038 | 영무 | 무효 | | BTREE | | |
+------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
셋 중 3행 (0.00초)

참고로, MySQL 일부 버전은 컴포지트 키 설정을 허용하지 않는 것 같지만, 최신 키로도 가능합니다.

이제 정확히 같은 시간에 게시물이 있더라도 그 중 하나가 등록되지 않아 데이터의 무결성을 유지할 수 있습니다.

Related Articles