Plugin: database creation

时间:2012-11-25 作者:Bachir Messaouri

有人能告诉我这个函数有什么问题吗?

function xattachments_db_install() {
   global $wpdb;
   $xattachments_db_version = "1.0";
   $table_name = $wpdb->prefix ."xattachments";

   $sql = "CREATE TABLE IF NOT EXISTS ".$table_name. " (
        \'xattachments_id\' int(10) unsigned NOT NULL,
        \'xattachments_name\'  varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
        \'xattachments_title\' varchar(200) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
        \'post_id\' int(10) unsigned NOT NULL,
        \'xattachments_data_id\' int(11) NOT NULL,
        PRIMARY KEY (\'xattachments_id\') 
   ) ENGINE=MyISAM DEFAULT CHARSET=CHARSET=utf8 COLLATE utf8_bin ;";

   require_once(ABSPATH.\'wp-admin/includes/upgrade.php\');
   dbDelta($sql);
   add_option("xattachments_db_version", $xattachments_db_version);     
}
register_activation_hook(__FILE__,\'xattachments_db_install\');
当我激活插件时,它不会生成任何错误消息,但该表没有在数据库中创建。

此函数位于插件文件的最开头。

非常感谢。

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

表创建SQL中的此部分看起来错误:DEFAULT CHARSET=CHARSET=utf8. 应该是这样的DEFAULT CHARSET=utf8.

而且dbDelta() 是一个相当微妙的函数。不要问我为什么,但您需要在PRIMARY KEY 关键字。您还需要去掉字段名称周围的引号,因为dbDelta() 被那些噎住了。也不要使用反勾号。

当然,还有WP_DEBUGTRUE 调试时。

结束