Cách thêm chỉ mục vào bảng cơ sở dữ liệu plugin


10

Tôi đã tạo một số bảng bổ sung cho plugin tôi đang phát triển và cần thêm chỉ mục vào các bảng này.

Cách WordPress để làm điều này là gì?

Việc sử dụng dbDelta()dường như không hoạt động và tôi không thấy bất kỳ lỗi nào trong nhật ký.

Câu trả lời:


4

Bạn có thể thực thi các câu lệnh SQL tùy ý với wpdb :: query () , bao gồm Báo cáo định nghĩa dữ liệu, vd

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Lưu ý: Bởi vì $wpdb->query()có thể thực thi SQL tùy ý , nếu câu lệnh bạn chuyển đến nó chứa BẤT K input dữ liệu người dùng nào, thì bạn nên sử dụng wpdb :: ready () để bảo vệ chống lại các cuộc tấn công SQL Injection.

Nhưng điều này đặt ra câu hỏi: làm thế nào bạn tạo các bảng dành riêng cho plugin của mình? "Thủ công" hay lập trình? Nếu lập trình, bạn đã không sử dụng $wpdb->query()? Nếu bạn đã thực hiện "thủ công", thì bạn thực sự nên tạo các bảng (và chỉ mục của chúng) khi kích hoạt plugin.

Xem câu trả lời tuyệt vời để này câu hỏi WPSE khác cho làm thế nào để móc vào kích hoạt plugin (và / hoặc vô hiệu hóa và gỡ bỏ cài đặt) để làm những việc như tạo bảng tin.


Cảm ơn vì đã trả lời câu hỏi này mặc dù đã 5 tháng tuổi. Tôi đã kết thúc việc này nhưng không chắc đó có phải là "cách đúng đắn" hay không. Sẽ là một trợ giúp lớn trong lần tới khi tôi cố gắng làm điều này.
Sữa

@Milk Niềm vui của tôi. Tôi đoán rằng bạn đã giải quyết vấn đề của mình hoặc đã từ bỏ :-) Tôi đã trả lời (thậm chí tho 5mos sau khi bạn hỏi) để giúp những người khác có cùng vấn đề và tìm kiếm WPSE và xem qua câu hỏi của bạn.
Paul 'Sparrow Hawk' Biron

3

Sử dụng dbDelta, trên đầu trang của PRIMARY KEY, bạn có thể bao gồm từ KEY để tạo chỉ mục cho các cột khác:

Bạn phải sử dụng từ khóa KEY thay vì từ đồng nghĩa INDEX và bạn phải bao gồm ít nhất một KEY.

Ví dụ từ lược đồ.php trong lõi:

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;

Nguồn: codex - Tạo bảng bằng plugin

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.