gpt4 book ai didi

php - 无法使用 WordPress wp_posts 表添加外键

转载 作者:行者123 更新时间:2023-11-29 18:40:35 26 4
gpt4 key购买 nike

我正在尝试添加一个与 {wp_posts} 表相关的新表,此代码在本地主机中正常工作,并且通过了所有测试,但在服务器数据库上失败并生成[无法添加外键约束]。

[post_id] 字段与 {wp_posts->ID} 字段完全相同..我不知道我错过了什么。

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}" );

最佳答案

老问题,但我现在面临这个问题。

问题是当我们想要设置关系时,我们需要匹配列类型、排序规则和引擎。

wp_posts ID:bigint(20) UNSIGNED

您的表 post_id:bigint(20) UNSIGNED

这是匹配的,但是ENGINE有问题。

示例:旧表写为innodb,但您的 MYSQL 默认引擎设置为MYISAM。因此,如果您没有定义 ENGINE 类型,您将创建 MYISAM 表而不是 InnoDB ,它不支持关系/外键。注意:旧的 mysql 版本使用 MYISAM 作为默认引擎,而不是 InnoDB

在我的问题中:

wp_posts ID:bigint(20) UNSIGNED InnoDB

我的表post_id:bigint(20) InnoDB

引擎和类型匹配,但我收到错误。因为我忘记设置属性UNSIGNED。当我设置相同的属性时,一切都完美。

注意:使用 varchar、char 等字符串类型时,不要忘记排序规则

我希望这对其他人有帮助。

关于php - 无法使用 WordPress wp_posts 表添加外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44970736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com