Обновление таблиц в 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 написано, что функция проверяет структуру таблицы и если заданная отличается от той, что есть, то в нее вносятся изменения и нет — данные при этом не пропадают.