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가 FOREIGN KEY를 지원할 때까지 정말로 그걸로 살아야 합니까?
- dbDelta가 3 년 된 MySQL 버전의 외래 키와 만 작동한다는 것이 사실입니까?
1
계단식 삭제 / 업데이트는 훌륭하지만 완전히 필요합니까? 코드에 해당 부분을 포함 시키거나 테이블을 리팩터링 할 수 있습니까?
—
T0xicCode
필요한지 잘 모르겠습니다.이 타사 코드를 충분히 연구하지 않았습니다.
—
Gaia
DeadMedic가 정확합니다. 그러나 방금이 링크 dbDelta 및 FOREIGN KEY를 찾았습니다 . 문제를 해결하는 방법을 설명합니다. 그것은 나를 위해 일했다. 행운을 빕니다!