플러그인 데이터베이스 테이블에 색인을 추가하는 방법


10

개발중인 플러그인에 대한 추가 테이블을 만들었으며 이러한 테이블에 인덱스를 추가해야합니다.

이 작업을 수행하는 WordPress 방법은 무엇입니까?

사용 dbDelta()이 작동하지 않는 것 같으며 로그에 오류가 표시되지 않습니다.

답변:


4

데이터 정의 명령문을 포함하여 wpdb :: query () 를 사용하여 임의의 SQL 문을 실행할 수 있습니다.

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

참고 : 때문에 $wpdb->query()실행할 수있는 임의의 SQL을 당신이 그것에 통과 문이 포함 된 경우, 모든 사용자 입력을 한 후 사용한다 wpdb가) (준비 :: SQL 주입 공격으로부터 보호 할 수 있습니다.

그러나 이것은 질문을 제기합니다 : 플러그인 특정 테이블을 어떻게 만들었습니까? "수동으로"또는 프로그래밍 방식으로? 프로그래밍 방식으로 사용하지 $wpdb->query()않습니까? "수동으로"수행 한 경우 플러그인 활성화시 실제로 테이블 (및 해당 인덱스)을 작성해야합니다.

개인 테이블 생성과 같은 작업을 수행하기 위해 플러그인 활성화 (및 비활성화 및 제거)에 연결하는 방법에 대해서는 이 다른 WPSE 질문에 대한 훌륭한 답변을 참조하십시오 .


5 개월이 지난이 질문에 답변 해 주셔서 감사합니다. 나는 이것을하고 결국 "올바른 방법"인지 확실하지 않았다. 다음에이 작업을 시도 할 때 큰 도움이 될 것입니다.
Milk

@Milk 내 기쁨. 나는 당신이 이미 당신의 문제를 해결했거나 포기했다고 생각했습니다.
폴 '스패로우 호크'비론

3

PRIMARY KEY 위에 dbDelta를 사용하여 KEY라는 단어를 포함시켜 다른 열에 대한 색인을 작성할 수 있습니다.

동의어 INDEX가 아닌 키워드 KEY를 사용해야하며 하나 이상의 KEY를 포함해야합니다.

핵심 schema.php의 예 :

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

출처 : codex-플러그인으로 테이블 만들기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.