5

我正在尝试删除激活自定义插件时创建的数据库表。我使用的是基本相同的代码,只是一个 drop 查询。但是,桌子不会掉落!

我已确认以下内容:

  • WP 数据库用户有权删除表(我通过在工作台中运行 sql 查询确认)
  • 正在调用查询并且是正确的(我使用 'die($sql)' 输出查询,然后在工作台中运行)

    function my_plugin_remove_database() {
         global $wpdb;
         $table_name = $wpdb->prefix . "my_plugin_table";
         $sql = "DROP TABLE IF EXISTS $table_name;";
         //die($sql);
         require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
         dbDelta( $sql );
         delete_option("my_plugin_db_version");
    }
    register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );
    
4

1 回答 1

11

使用$wpdb->query()代替dbDelta()

function my_plugin_remove_database() {
     global $wpdb;
     $table_name = $wpdb->prefix . "my_plugin_table";
     $sql = "DROP TABLE IF EXISTS $table_name;";
     $wpdb->query($sql);
     delete_option("my_plugin_db_version");
}

register_deactivation_hook( __FILE__, 'my_plugin_remove_database' );

dbDelta()不支持DROP TABLE查询。

于 2013-05-31T19:16:07.520 回答