Wordpress dbDelta无法运行

时间:2011-08-29 12:23:08

标签: database plugins wordpress-plugin wordpress

我正在为客户编写一个插件,虽然它通常运行良好,但我发现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响应。它报告表已经创建,但是,数据库中没有任何新内容。有什么想法吗?

提前致谢! // 乔纳森

5 个答案:

答案 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

谢谢! 有一个不错的代码