【问题标题】:WordPress Plugin Development - Can't drop database table after plugin deactivation?WordPress 插件开发 - 插件停用后无法删除数据库表?
【发布时间】:2013-05-27 16:16:29
【问题描述】:

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

【问题讨论】:

    标签: mysql wordpress sql-drop


    【解决方案1】:

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

    【讨论】:

    • 太棒了!完美运行,不知道 dbDelta 不支持 Drop。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多