我正在升级一个插件,但dbdelta有问题。
以下是原始db创建函数:
global $jal_db_version;
$jal_db_version = "0.1";
function jal_install() {
global $jal_db_version;
global $wpdb;
$table_name = $wpdb->prefix . "jalPlugin";
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
timestamp datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
hash text NOT NULL,
uname tinytext NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql);
update_option("jal_db_version", $jal_db_version);
}
// Installs db on plugin activation
register_activation_hook(__FILE__,\'jal_install\');
你可能会从
WordPress Codex on Using Tables -- 它工作得很好。(我显然修改了函数名,以免与其他插件冲突)。
我正在尝试升级用于插件的db,但遇到了一些问题。我认为dbdelta应该能够看到您所拥有的和您想要的之间的差异,并相应地修改一个表。下面是我的升级脚本:
global $jal_db_version;
$jal_db_version = "0.2";
function jal_install() {
global $wpdb;
$table_name = $wpdb->prefix . "jalPlugin";
$sql = "CREATE TABLE " . $table_name . " (
id mediumint(9) NOT NULL AUTO_INCREMENT,
timestamp datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
hash text NOT NULL,
uIP VARCHAR(55) DEFAULT \'\' NOT NULL,
uname tinytext NOT NULL,
UNIQUE KEY id (id)
);";
require_once(ABSPATH . \'wp-admin/includes/upgrade.php\');
dbDelta($sql);
update_option("jal_db_version", $jal_db_version);
}
function jal_install_update_check() {
global $jal_db_version;
if (get_site_option(\'jal_db_version\') != $jal_db_version) {
jal_install();
}
}
add_action(\'plugins_loaded\', \'jal_install_update_check\');
我从同一个法典页上得到了这个代码。
数据库未更新,错误日志中出现错误:
[05-Feb-2012 20:33:18] WordPress database error Table \'wp_2_jalPlugin\' already exists for query CREATE TABLE wp_2_jalPlugin (
id mediumint(9) NOT NULL AUTO_INCREMENT,
timestamp datetime DEFAULT \'0000-00-00 00:00:00\' NOT NULL,
hash text NOT NULL,
uIP VARCHAR(55) DEFAULT \'\' NOT NULL,
uname tinytext NOT NULL,
UNIQUE KEY id (id)
) made by require, require_once, require_once, require_once, do_action, call_user_func_array, qrLogin_update_db_check, qrLoginDB_install, dbDelta
在我看来,dbdelta似乎不理解它有工作要做。。。
有什么想法吗?
。。。谢谢你的时间!