जवाबों:
आप डेटा परिभाषा विवरण, जैसे 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()
निष्पादित कर सकते हैं , यदि आप जिस स्टेटमेंट से गुजरते हैं , उसमें कोई भी उपयोगकर्ता इनपुट शामिल है, तो आपको एसक्यूएल इंजेक्शन हमलों से बचाने के लिए wpdb :: तैयार () का उपयोग करना चाहिए ।
लेकिन यह सवाल उठाता है: आपने अपना प्लगइन-विशिष्ट टेबल कैसे बनाया? "मैन्युअल रूप से" या प्रोग्रामिक रूप से? यदि प्रोग्रामेटिक रूप से, आपने उपयोग नहीं किया $wpdb->query()
? यदि आपने इसे "मैन्युअल रूप से" किया है, तो आपको वास्तव में प्लगइन सक्रियण पर तालिकाओं (और उनके अनुक्रमित) को बनाना चाहिए।
निजी तालिकाओं जैसे काम करने के लिए प्लगइन सक्रियण (और / या निष्क्रिय करने और अनइंस्टॉल) में हुक करने के लिए इस अन्य डब्ल्यूपीएसई प्रश्न का उत्कृष्ट उत्तर देखें ।
एक प्राथमिक कुंजी के शीर्ष पर dbDelta का उपयोग करते हुए, आप अन्य कॉलम के लिए एक इंडेक्स बनाने के लिए शब्द को शामिल कर सकते हैं:
आपको इसके पर्यायवाची INDEX के बजाय कुंजी शब्द कुंजी का उपयोग करना चाहिए और आपको कम से कम एक कुंजी शामिल करनी होगी।
कोर में 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;