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

标签 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();

但是没有添加表格。我的表语法?还是我设置的方式?是 protected 关键字吗?

最佳答案

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

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

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

我还发现 $wpdb->get_charset_collat​​e() 导致了我的表创建错误,因此暂时将其删除。

关于php - 当 SQL 语法正确时,Wordpress dbDelta 函数不添加表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415844/

相关文章:

javascript - 从编辑表单中的下拉列表中显示国家/地区 Laravel 5.2

php - Mysql unix时间戳选择

css - 如果我想像电影 The Matrix 一样应用 Green Scale 滤镜效果,CSS Filter Value 可能是什么?

ios - 在SWIFT中解析JSON API到WIFI和4G的不同结果

php - 根据 Woocommerce 中的产品类别隐藏价格

php - 如何使用php在不重新加载/刷新当前页面的情况下显示mysql记录?

php - 实现 OAuth 库以连接到 ETSY 商店时出现 fatal error

php - Elasticsearch查询构造中的if else语句

php - SELECT 列表不在 GROUP BY 子句中并且包含非聚合列 'explore.ratings.id'

php - PHP-MySQL中OAuth的简单演示