我正在为客户编写一个插件,虽然它通常运行良好,但我发现dbDelta不允许我在插件激活时创建我需要的表。
我正在运行以下代码来绑定激活功能:
register_activation_hook(__FILE__, 'adminInstallation');
这就是功能本身:
function adminInstallation(){
global $wpdb;
$objectEquipment = 'wp_object_equipment';
$equipmentSQL = "CREATE TABLE ".$objectEquipment." (
id mediumint(9) NOT NULL AUTO_INCREMENT,
name tinytext NOT NULL
);";
require_once(ABSPATH.'wp-admin/includes/upgrade.php');
$equipment = dbDelta($equipmentSQL);
}
一旦运行,我正在检查数据库,但没有添加任何表。试图转储错误只会导致Wordpress告诉我有意外输出,但它不会让我看到服务器返回的实际消息。这个问题一直困扰着我几个小时,我不能继续,直到它解决了。这里有没有人知道为什么会这样做?
据我所知,所有代码都是有效的,这是我写的第三个插件。我甚至尝试使用我之前的代码,但这也没有用。
编辑:我尝试在插件激活后运行该函数并转储dbDelta响应。它报告表已经创建,但是,数据库中没有任何新内容。有什么想法吗?
提前致谢! // 乔纳森
答案 0 :(得分:3)
来自http://codex.wordpress.org/Creating_Tables_with_Plugins:
- 您必须在SQL语句中将每个字段放在自己的行上。
- 单词PRIMARY KEY和主键定义之间必须有两个空格。
- 您必须使用关键字KEY而不是其同义词INDEX,并且您必须至少包含一个KEY。
答案 1 :(得分:3)
在dbDelta调用之后你发出echo $wpdb->last_error;
所以你得到了mysql错误。
答案 2 :(得分:0)
我知道dbDelta非常讲究格式化。我相信问题是你没有在数据库部分周围使用反引号(`)。请尝试以下方法。
在旁注中,指定主键不会受到伤害。
$equipmentSQL = "CREATE TABLE `".$objectEquipment."` (
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
PRIMARY KEY (`id`)
);";
答案 3 :(得分:0)
您可以试试这个function:
$table_name = "ratings";
$table_columns = "id INT(6) UNSIGNED AUTO_INCREMENT,
rate tinyint(1) NOT NULL,
ticket_id bigint(20) NOT NULL,
response_id bigint(20) NOT NULL,
created_at TIMESTAMP";
$table_keys = "PRIMARY KEY (id),
KEY ratings_rate (rate),
UNIQUE KEY ratings_response_id (response_id)";
create_table($table_name, $table_columns, $table_keys);
答案 4 :(得分:0)
我搜索并且dbDelta正在运行$ wpdb-> query($ sqlQuery);用于自定义查询。
对于那些无法使用dbDelta的用户,请使用
print
谢谢! 有一个不错的代码