【问题标题】:Wordpress dbDelta not functioningWordpress dbDelta 不起作用
【发布时间】:2011-08-29 12:23:07
【问题描述】:

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

提前致谢! // 乔纳森

【问题讨论】:

标签: database plugins wordpress


【解决方案1】:

来自http://codex.wordpress.org/Creating_Tables_with_Plugins

  • 您必须在 SQL 语句中将每个字段放在自己的行中。
  • PRIMARY KEY 和主键定义之间必须有两个空格。
  • 您必须使用关键字 KEY 而不是其同义词 INDEX,并且您必须至少包含一个 KEY。

【讨论】:

    【解决方案2】:

    你应该在 dbDelta 调用之后echo $wpdb->last_error;,这样你就会得到 mysql 错误。

    【讨论】:

      【解决方案3】:

      你可以试试这个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】:

        我搜索并且 dbDelta 正在运行 $wpdb->query($sqlQuery);用于自定义查询。

        对于那些 dbDelta 不工作的人使用

        dbDelta($sql_query_to_create_table);
        

        谢谢! 有一个漂亮的代码

        【讨论】:

          【解决方案5】:

          我知道 dbDelta 对格式非常讲究。我认为问题在于您没有在数据库部分周围使用反引号(`)。试试下面的。

          顺便说一句,指定主键也无妨。

          $equipmentSQL = "CREATE TABLE `".$objectEquipment."` (
            `id` mediumint(9) NOT NULL AUTO_INCREMENT,
            `name` tinytext NOT NULL,
            PRIMARY KEY (`id`)
          );";
          

          【讨论】:

          猜你喜欢
          • 2018-07-10
          • 1970-01-01
          • 2012-04-15
          • 2021-09-13
          • 2012-05-03
          • 2017-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多