在安装时创建数据库

时间:2012-06-27 作者:woutr_be

我正在开发一个自定义wordpress插件,但我似乎不知道在安装插件时如何创建数据库。(或更新时)

当我四处搜索时,我想到了这一点,但这似乎没有任何作用。

function to_install() {
    global $wpdb;
    $sql = "CREATE TABLE to_issues (
        id int(11) NOT NULL AUTO_INCREMENT,
        name varchar(125) NOT NULL
    );";

    require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
    dbDelta($sql);
    add_option(\'to_db_version\', TO_VERSION);
}
function to_install_data() {
    global $wpdb;
    $welcome_name = "Hello";
    $welcom_text = "Install successfull";
}
register_activation_hook(__FILE__, \'to_install\');
register_activation_hook(__FILE__, \'to_install_data\');
另一方面,在更新插件时,这会重新安装所有表吗?或者wordpress会正确处理这个问题吗?

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您的SQL命令无效。错误显示:

WordPress数据库错误:[表定义不正确;只能有一个自动列,必须将其定义为键]创建表到\\u问题(id int(11)不为NULL auto\\u INCREMENT,name varchar(125)不为NULL)

尝试:

$sql ="CREATE TABLE {$wpdb->prefix}to_issues (
    id int(11) unsigned NOT NULL auto_increment,
    name varchar(125) NOT NULL,
    PRIMARY KEY  (id)
    );";
请注意dbDelta() 对传递给它的内容非常特别。例如,在PRIMARY KEY(id).

我已添加$wpdb->prefix 向表中添加(用户指定的)WordPress前缀。这是一个很好的实践,因为有些人在他们的数据库中安装了多个WordPress。

dbDelta“寄存器激活”仅在插件激活时触发,而不是在插件升级时触发。因此,当用户停用并激活插件时,dbDelta($sql) 已触发-这是有意的。dbDelta (see source) 识别“创建”查询,并首先检查表是否已存在,如果不存在,则创建表。如果该表确实存在,它将检查每个字段是否与给定$sql, 如果没有,则更新它们。如果该字段不存在,但在$sql, 它已创建。

通过这种方式,您可以通过更改$sql. 但是,在更新插件时,to_install 不会调用-因此您需要手动调用它admin_init 检查当前“数据库版本”后(TO_VERSION) 是一个旧的。看见this post 有关激活/停用/卸载/更新过程的详细说明。。

结束

相关推荐

Server database problem

我刚刚将我的网站从共享服务器转移到VPS,但它并没有启动,当我向VPS技术支持询问时,他们给我发了一封电子邮件,我不理解:-电子邮件您的网站“www.onlinemba.co.in”已经从以前的主机迁移而来,我们现在在访问依赖于数据库的php文件时得到一个空白页面。数据库编码似乎有问题,因为所有其他php文件的访问都很好,数据库连接也没有问题。您可以通过访问网站预览URL来检查相同的内容“http://38.100.101.228/info.php“。您的Kloxo面板详细信息如下URL:XXXXX用户: