当SQL语法正确时,Wordpress dbDelta函数不会添加表格
问题描述:
嗨我写了一个函数来添加一个表。我测试过我的语法,它在我的phpmyadmin中工作,但由于某种原因,它并未在我的插件中激活? :S当SQL语法正确时,Wordpress dbDelta函数不会添加表格
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();
但是表格没有被添加。我的表语法是什么?或者我设置它的方式?它是受保护的关键字吗?
答
我收到错误的原因有几个。首先register_activation_hooks()
是一个棘手的问题,我有。它没有使用我的班级结构注册(上面没有显示)。
为了解决这个问题,我通过在我的插件的主文件中注册激活进行了快速修复。
第二个是需要有一个UNIQUE
和括号之间的空间和PRIMARY KEY
和括号之间需要2个空格。
我还发现$wpdb->get_charset_collate()
导致我的表格创建错误,所以现在只是简单地删除它。
检查错误https://codex.wordpress.org/Function_Reference/is_wp_error和使用错误报告http://php.net/manual/en/function.error-reporting.php –
我会添加一些代码来setup_tables看看它是否被调用。 – mark
我发现了一些错误:p一个是setup_tables的第3行不需要第一个斜杠。其次是唯一性和(电子邮件)之间必须有一个空格,而主键和(ID)之间必须有一个双空格。我也发现dbDelta返回它已经添加了表。但表格不存在? :S – sourRaspberri