Php 无法使用WordPress wp_posts表添加外键
我正在尝试添加一个与{wp_posts}表有关系的新表,该代码在localhost中正常工作,它通过了所有测试,但在服务器数据库上失败,并生成[无法添加外键约束 [post_id]字段与{wp_posts->id}字段完全相同。。我不知道我错过了什么Php 无法使用WordPress wp_posts表添加外键,php,mysql,wordpress,foreign-keys,Php,Mysql,Wordpress,Foreign Keys,我正在尝试添加一个与{wp_posts}表有关系的新表,该代码在localhost中正常工作,它通过了所有测试,但在服务器数据库上失败,并生成[无法添加外键约束 [post_id]字段与{wp_posts->id}字段完全相同。。我不知道我错过了什么 global $wpdb; $charset_collate = $wpdb->collate; $tbl_my_users = $wpdb->prefix . '_TABLE_NAME'; dbDelta( "CREATE TAB
global $wpdb;
$charset_collate = $wpdb->collate;
$tbl_my_users = $wpdb->prefix . '_TABLE_NAME';
dbDelta( "CREATE TABLE IF NOT EXISTS {$tbl_my_users} (
user_id BIGINT(20) UNSIGNED NOT NULL,
post_id BIGINT(20) UNSIGNED NOT NULL,
name VARCHAR(150) NOT NULL,
email TINYTEXT NULL,
INDEX (name),
PRIMARY KEY (user_id),
CONSTRAINT Constr_Unique_UserID UNIQUE( user_id ),
CONSTRAINT Constr_Unique_PostID UNIQUE( post_id ),
CONSTRAINT Constr_Unique_User UNIQUE( name ),
CONSTRAINT Constr_My_Users
FOREIGN KEY FK_My_Users (post_id) REFERENCES {$wpdb->posts} (ID) ON DELETE CASCADE ON UPDATE CASCADE
) COLLATE {$charset_collate}" );
试试这个bewlo查询
global $wpdb;
$charset_collate = $wpdb->collate;
$tbl_my_users = $wpdb->prefix . '_TABLE_NAME';
dbDelta("CREATE TABLE IF NOT EXISTS ".$tbl_my_users." (
user_id BIGINT(20) UNSIGNED NOT NULL,
post_id BIGINT(20) UNSIGNED NOT NULL,
name VARCHAR(150) NOT NULL,
email TINYTEXT NULL,
INDEX (name),
PRIMARY KEY (user_id),
CONSTRAINT Constr_Unique_UserID UNIQUE( user_id ),
CONSTRAINT Constr_Unique_PostID UNIQUE( post_id ),
CONSTRAINT Constr_Unique_User UNIQUE( name ),
CONSTRAINT Constr_My_Users
FOREIGN KEY (`post_id`) REFERENCES ".$wpdb->prefix."posts (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
) COLLATE SET utf8 COLLATE utf8_general_ci" );
老问题,但我现在面临这个问题 问题是当我们想要设置关系时,我们需要匹配列类型、排序规则和引擎 wp_posts ID:
bigint(20)UNSIGNED
您的表post_id:bigint(20)UNSIGNED
这是匹配项,但您的引擎有问题
示例:旧表写为innodb
,但MYSQL默认引擎设置为MYISAM
。因此,如果不定义引擎类型,您将创建不支持关系/外键的MYISAM
表。注意:旧的mysql版本使用MYISAM
作为默认引擎,而不是InnoDB
在我的问题中:
wp_posts ID:bigint(20)UNSIGNED InnoDB
我的表post_id:bigint(20)InnoDB
引擎和型号是匹配的,但我得到了eror。因为我忘了设置属性未签名
。当我设置相同的属性时,所有属性都可以完美地工作
注意:当使用诸如varchar、char
等字符串类型时,不要忘记排序规则
我希望这会对其他人有所帮助。至少写下你为什么要投票来理解。。你真的很无助。我没有问一个难的问题,也没有在这个网站上得到答案。你只需要简单的问题。。对??谢谢你的帮助,但我解决了问题,但我无法解决它,我发现我应该在创建新表时编写引擎,但它应该等于wp_posts表的引擎。所以现在我需要写[ENGINE=旧表引擎]。。我不知道为什么它没有写入引擎关键字就失败了?