Обновление таблиц в WordPress

Собственно проблема заключалась в том, что похожая функция для создания таблицы отрабатывала на ура, а вот при вызове функции обновления она не обновлялась.

Прошерстив кучу форумов и обновив базу данных (уже думал баг MariaDB) так и не смог решить проблему пока не слизал формат записи с codeplex:

    function create_tokens_table(){
        global $wpdb;
        $table_name = $wpdb->prefix.GA_TOKENS_TABLE;
        if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name){
            $charset_collate = $wpdb->get_charset_collate();
            $sql = "CREATE TABLE $table_name (
                id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
                uid int(11) NOT NULL,
                useragent varchar(255) NOT NULL,
                hashval varchar(255) NOT NULL,
                refresh_token varchar(255) NOT NULL,
                created int(11) NOT NULL,
                provider varchar(255) NOT NULL,
                PRIMARY KEY  (id)
            ) $charset_collate;";
            require_once(ABSPATH.'wp-admin/includes/upgrade.php');
            dbDelta($sql);
            add_option('goauth_db_version',$this->db_version);
        }
    }
    function update_tokens_table(){
        global $wpdb;
        $table_name = $wpdb->prefix.GA_TOKENS_TABLE;
        $charset_collate = $wpdb->get_charset_collate();
        $sql = "CREATE TABLE $table_name (
            id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
            uid int(11) NOT NULL,
            useragent varchar(255) NOT NULL,
            hashval varchar(255) NOT NULL,
            refresh_token varchar(255) NOT NULL,
            created int(11) NOT NULL,
            provider varchar(255) NOT NULL,
            PRIMARY KEY  (id)
        );";
        require_once(ABSPATH.'wp-admin/includes/upgrade.php');
        dbDelta($sql);
        update_option('goauth_db_version',$this->db_version);
    }

Надо обратить внимание на то, что строки разбиты и в конце после PRIMARY KEY идет двойной пробел перед id.

Вот  в таком варианте все завелось с полпинка.

Если кого-то коробит, что используется CREATE TABLE, а не ALTER TABLE, то спешу сообщить, что в описании на codeplex написано, что функция проверяет структуру таблицы и если заданная отличается от той, что есть, то в нее вносятся изменения и нет — данные при этом не пропадают.

Показать комментарии