dbDelta SQL Query Not Working

时间:2014-09-26 作者:Domenic Fiore

我知道使用dbDelta的细节,并且我已经阅读了文档(http://codex.wordpress.org/Creating_Tables_with_Plugins), 阅读我所问问题的其他答案,但我只是不知道我做错了什么。当我var\\u转储dbDelta的结果时,我没有得到任何错误,只是“array(1) { [0]=> string(48) "Added index wp_ovrdrvamdata PRIMARY KEY id (id)" }“”或其他不真实的语句。只是没有创建表。

以下是代码/查询:

function ovrdrv_asset_install() {
    global $wpdb;
    global $ovrdrv_am_db_version;
    $wpdb->show_errors();
    $data_table_name = $wpdb->prefix . \'ovrdrvamdata\';


    $sql = "CREATE TABLE ". $data_table_name ." (
            id int(9) NOT NULL AUTO_INCREMENT,
            data varchar(255) NOT NULL,
            form_id smallint(4) NOT NULL,
            PRIMARY KEY  id (id)
        );";

    require_once( ABSPATH . \'wp-admin/includes/upgrade.php\' );
    var_dump(dbDelta( $sql ));
    $wpdb->print_error();
    add_option(\'ovrdrv_am_db_version\', $ovrdrv_am_db_version);
}
编辑:打开WPDB错误后,我得到以下错误:

WordPress database error: [Multiple primary key defined]
ALTER TABLE wp_ovrdrvamdata ADD PRIMARY KEY id (id) /* From             [client.staging.wpengine.com/wp-admin/plugins.php?activate=true&plugin_status=all&paged=1&s=] in [/nas/wp/www/staging/client/wp-content/plugins/client-plugin/table-creation.php:22] */
array(1) { [0]=> string(48) "Added index wp_ovrdrvamdata PRIMARY KEY id (id)" }

WordPress database error: [Multiple primary key defined]
ALTER TABLE wp_ovrdrvamdata ADD PRIMARY KEY id (id) /* From [client.staging.wpengine.com/wp-admin/plugins.php?activate=true&plugin_status=all&paged=1&s=] in [/nas/wp/www/staging/client/wp-content/plugins/client-plugin/table-creation.php:22] */
它似乎试图多次添加主键或其他内容,即使表还不存在。

任何帮助都将不胜感激。

2 个回复
最合适的回答,由SO网友:Otto 整理而成

这是无效的。

PRIMARY KEY id (id)

应该是:

PRIMARY KEY (id)

与其他键不同,主键没有标识符或名称。他们不需要,因为你只能有一个。

SO网友:Justin Bell

如果在SQL语句中抛出错误,应参考http://codex.wordpress.org/Class_Reference/wpdb#Show_and_Hide_SQL_Errors 获取如何识别的建议。如果您不去查找错误,那么错误的发生并不总是显而易见的。

结束

相关推荐

Add CPT values to Database

我不确定这是不是件容易的事。我有一个插件,具有定制帖子类型所需的所有功能:过滤器、导航。。。我需要为这个CPT创建很多帖子(使用分类法)(需要做很多工作才能正确创建它)。所以我只想添加一次这个自定义帖子,而不是每次我想利用我在其他网站的插件。。。实现这一目标的最佳方式是什么?我是不是每次都要进行某种形式的进出口贸易?我应该利用wp\\u insert\\u post并对帖子的内容进行硬编码吗?为我的英语道歉,我不知道我是否已经解释过了。。。谢谢