当SQL语法正确时,Wordpress dbDelta函数不添加表

时间:2015-09-05 17:27:50

标签: php mysql wordpress

您好我写了一个添加表格的功能。我已经测试了我的语法,它可以在我的phpmyadmin中运行,但由于某些原因它在我的插件中没有被激活? :S

class clients{
    public static $version="1.0";
    protected static function setup_tables(){
        global$wpdb;
        require_once(ABSPATH."/wp-admin/includes/upgrades.php");
        dbDelta("CREATE TABLE ".$wpdb->prefix."hippie_clients (ID mediumint(9) NOT NULL AUTO_INCREMENT, email varchar(100) NOT NULL, password varchar(512), paid tinyint(1) NOT NULL DEFAULT 0, firstname varchar(50) NOT NULL, lastname varchar(70) NOT NULL,signup TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, free tinyint(1) DEFAULT 1,gender tinyint(1) NOT NULL, lastlog varchar(200), UNIQUE(email), PRIMARY KEY(ID))$wpdb->get_charset_collate();");
        if(!isset($wpdb->clients))$wpdb->clients=$wpdb->prefix."hippie_clients";
        add_option('Hippie_clients_version',self::$version);
    }
    //I'm using another class to manage my activation hooks etc but this is the basic idea
    public static function setup(){
        self::setup_tables();
    }
    public function run(){
        register_activation_hook(__FILE__,(array('clients','setup'));
    }
}
$clients=new clients();
$clients->run();

但是没有添加表格。我的表语法是什么?还是我的设置方式?它是受保护的关键字吗?

1 个答案:

答案 0 :(得分:0)

我遇到错误的原因有几个。首先register_activation_hooks()是一个棘手的问题。它没有使用我的类结构进行注册(上面没有显示)。

为了解决这个问题,我通过在插件的主文件中注册激活进行了快速修复。

第二个是UNIQUE和括号之间需要一个空格,PRIMARY KEY和括号之间需要2个空格。

我还发现$wpdb->get_charset_collate()导致我的表创建错误,所以现在只需删除它。