บน PHP 5.3.13 / MySQL 5.5.21 รหัสต่อไปนี้ใช้ไม่ได้:
if($check_custom_fields_form!=1){
$sql = "CREATE TABLE IF NOT EXISTS ". $table_custom_fields_form ." (
`form_name` longtext NOT NULL,
`field_id` bigint(20) NOT NULL,
FOREIGN KEY (`field_id`) REFERENCES $table_custom_fields (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8 COLLATE utf8_general_ci";
dbDelta($sql);
}
if($check_subscribe_cat!=1){
$sql = "CREATE TABLE IF NOT EXISTS ". $table_subscribe_cat ." (
`subscribe_id` bigint(20) NOT NULL,
`cat_id` bigint(20) NOT NULL,
FOREIGN KEY (`subscribe_id`) REFERENCES ".$wpdb->prefix."tgt_subscription (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (`cat_id`) REFERENCES ".$wpdb->prefix."terms (`term_id`) ON DELETE CASCADE ON UPDATE CASCADE
) CHARACTER SET utf8 COLLATE utf8_general_ci";
dbDelta($sql);
}
ผู้ให้บริการรหัสปัญหาปรับลดไปยัง MySQL 5.1.37 (ไม่ขอบคุณ) หรือปรับปรุงต่อไปนี้:
if($check_custom_fields_form!=1){
$sql = "CREATE TABLE IF NOT EXISTS ". $table_custom_fields_form ." (
`form_name` longtext NOT NULL,
`field_id` bigint(20) NOT NULL,
KEY(field_id)
) CHARACTER SET utf8 COLLATE utf8_general_ci";
dbDelta($sql);
}
if($check_subscribe_cat!=1){
$sql = "CREATE TABLE IF NOT EXISTS ". $table_subscribe_cat ." (
`subscribe_id` bigint(20) NOT NULL,
`cat_id` bigint(20) NOT NULL,
KEY(subscribe_id),
KEY(cat_id)
) CHARACTER SET utf8 COLLATE utf8_general_ci";
dbDelta($sql);
}
ซึ่งดูเหมือนจะเป็นวิธีที่ค่อนข้างสกปรกในการแก้ไขปัญหา (ไม่มีการลบ / การปรับปรุงแบบเรียงซ้อน) ดังนั้น:
- ฉันต้องใช้ชีวิตแบบนั้นจริงหรือไม่จนกว่า dbDelta จะรองรับคีย์ต่างประเทศ
- เป็นความจริงหรือไม่ที่ dbDelta ใช้งานกับคีย์ต่างประเทศในรุ่น MySQL อายุ 3 ปีเท่านั้น?
1
ในขณะที่การลบเรียง / ลบการปรับปรุงเป็นสิ่งที่ดีพวกเขามีความจำเป็นอย่างสิ้นเชิง? คุณสามารถรวมส่วนนั้นในรหัสของคุณหรือ refactor ตารางของคุณ?
—
T0xicCode
ฉันไม่แน่ใจว่าพวกเขาจำเป็นหรือไม่ฉันยังไม่ได้ศึกษารหัสบุคคลที่สามนี้พอที่จะรู้
—
Gaia
กระบวนการ DeadMedic ถูกต้อง อย่างไรก็ตามฉันเพิ่งพบLink dbDelta และ KEY ต่างประเทศนี้ มันอธิบายวิธีแก้ไขปัญหา มันใช้งานได้สำหรับฉัน โชคดี!