使用外键的DBDelta在更新时不起作用

时间:2013-07-15 作者:CodePorter

激活插件(register\\u activation\\u hook())时,我将外键与dbDelta一起使用。它在第一次创建表时效果很好,但在更新表时会输出错误(表已经存在,但必须对表进行更改)。有什么建议吗?

    if(GLOBAL_PLUGIN_VERION != get_option("GLOBAL_PLUGIN_VERSION")){
      $sql = "CREATE TABLE `".TEST_TABLE."` (
     `id` INT( 11 ) NOT NULL AUTO_INCREMENT,
     `title` VARCHAR( 100 ) NOT NULL,
     `description` TEXT DEFAULT NULL,
     `location_id` INT( 11 ) NOT NULL,
     PRIMARY KEY  (`id`),
     FOREIGN KEY  (`location_id`) REFERENCES `".TEST2_TABLE."` (`id`)
    );";
   }
错误:

PHP注意:wp管理/升级中未定义的偏移量:1。php在线1568

WordPress数据库错误您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解使用near“外键”的正确语法(location_id) 参考文献test2 (id)\' 在查询ALTER TABLE test的第1行添加列外键(location_id) 参考文献test2 (id) 制作人。。。

WordPress数据库错误为查询ALTER TABLE TEST ADD primary key定义了多个主键(id) 制作人。。。

1 个回复
SO网友:Pat J

Codex:

然而,请注意,dbDelta函数相当挑剔。例如:[……]

字段名称周围不得使用任何撇号或反勾号

$sql = "CREATE TABLE ".TEST_TABLE." (
    id INT( 11 ) NOT NULL AUTO_INCREMENT,
    title VARCHAR( 100 ) NOT NULL,
    description TEXT DEFAULT NULL,
    location_id INT( 11 ) NOT NULL,
    PRIMARY KEY  (id),
    FOREIGN KEY  (location_id) REFERENCES ".TEST2_TABLE." (id)
);";

结束

相关推荐

插件卸载:为什么在$wpdb->查询($DROP_SQL)之后运行DBDelta

我正在读专业的wordpress。他们卸载插件的代码是//build our query to delete our custom table $sql = \"DROP TABLE \" . $table_name . \";\"; //execute the query deleting the table $wpdb->query($sql); require_once(ABSPATH .’wp-admin/includes/upgrade.php’)