WordPress插件开发 - 插件停用后无法删除数据库表?

时间:2013-05-31 19:02:48

标签: mysql wordpress sql-drop

我正在尝试删除自定义插件激活时创建的数据库表。我使用的代码基本相同,只是一个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' );
    

1 个答案:

答案 0 :(得分:10)

使用$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 查询。